您当前的位置:主页 > 技术探讨 >

    vue路由

    时间:2017-10-21 14:06 日记人:arlen.zhou

    
    

    使用路由搭建单页应用

    之前已经通过命令安装了vue-router

    cnpm install vue-router --save

    webpack.config.js加入别名

    resolve: {
        alias: {vue: 'vue/dist/vue.js'}
      }
    

    为什么要加 alias 配置项?其作用可以在文档中有相应的描述:



     

    修改完之后的webpack.config.js是这样子的:

    var path = require('path')
    var webpack = require('webpack')
    
    module.exports = {
      entry: './src/main.js',
      output: {
        path: path.resolve(__dirname, './dist'),
        publicPath: '/dist/',
        filename: 'build.js'
      },
      resolveLoader: {
        root: path.join(__dirname, 'node_modules'),
      },
      module: {
        loaders: [
          {
            test: /\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\.vue$/,
            loader: 'vue'
          },
          {
            test: /\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\.js$/,
            loader: 'babel',
            exclude: /node_modules/
          },
          {
            test: /\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\.(png|jpg|gif|svg)$/,
            loader: 'file',
            query: {
              name: '[name].[ext]?[hash]'
            }
          }
        ]
      },
      resolve: {
        alias: {vue: 'vue/dist/vue.js'}
      },
      devServer: {
        historyApiFallback: true,
        noInfo: true
      },
      devtool: '#eval-source-map'
    }
    
    if (process.env.NODE_ENV === 'production') {
      module.exports.devtool = '#source-map'
      // http://vue-loader.vuejs.org/en/workflow/production.html
      module.exports.plugins = (module.exports.plugins || []).concat([
        new webpack.DefinePlugin({
          'process.env': {
            NODE_ENV: '"production"'
          }
        }),
        new webpack.optimize.UglifyJsPlugin({
          compress: {
            warnings: false
          }
        })
      ])
    }
    

    再按之前的方法写一个组件 secondcomponent.vue

    <template>
      <div id="secondcomponent">
        <h1>I am another page</h1>
        <a> written by {{ author }} </a>
        <p> 感谢 <a href="https://github.com/showonne">showonne</a>大神的技术指导</p>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          author: "微信公众号 jinkey-love",
          articles: [],
        }
      }
      }
    }
    </script>
    
    <style>
    </style>
    

    这时候修改 main.js,引入并注册 vue-router

    import VueRouter from "vue-router";
    Vue.use(VueRouter);
    

    并且配置路由规则和 app 启动配置项加上 router,旧版的 router.map 方法在 vue-router 2.0 已经不能用了。修改后的main.js如下:

    import Vue from 'vue'
    import App from './App.vue'
    import VueRouter from "vue-router";
    import VueResource from 'vue-resource'
    
    //开启debug模式
    Vue.config.debug = true;
    
    Vue.use(VueRouter);
    Vue.use(VueResource);
    
    // 定义组件, 也可以像教程之前教的方法从别的文件引入
    const First = { template: '<div><h2>我是第 1 个子页面</h2></div>' }
    import secondcomponent from './component/secondcomponent.vue'
    
    // 创建一个路由器实例
    // 并且配置路由规则
    const router = new VueRouter({
      mode: 'history',
      base: __dirname,
      routes: [
        {
          path: '/first',
          component: First
        },
        {
          path: '/second',
          component: secondcomponent
        }
      ]
    })
    
    // 现在我们可以启动应用了!
    // 路由器会创建一个 App 实例,并且挂载到选择符 #app 匹配的元素上。
    const app = new Vue({
      router: router,
      render: h => h(App)
    }).$mount('#app')
    

    这样子改完再打开浏览器看看。



     

    点击那两个链接试试,会发现<router-view class="view"></router-view>的内容已经展示出来,同时注意浏览器地址已经变更


     

    另外,也可以把 App.vue 的内容写在 main.js 也是可以的不过不建议这么做



     

    如果你使用 vue1.0和0.7版本的 vue-router,请参照下面这个教程, 他整个系列都不错的,当然仅限于 vue1.0 :

    http://guowenfh.github.io/2016/03/28/vue-webpack-06-router/