By
welkin
2019-03-03
Updated:2019-03-03
1. 在vue组件页面中,集成vue-router路由模块 vue-router官网
导入路由模块:
1 2 import VueRouter from 'vue-router'
安装路由模块:
导入需要展示的组件:
1 2 3 4 import login from './components/account/login.vue' import register from './components/account/register.vue'
创建路由对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var router = new VueRouter({ routes: [ { path : '/' , redirect : '/login' }, { path : '/login' , component : login }, { path : '/register' , component : register } ] });
将路由对象,挂载到 Vue 实例上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var vm = new Vue({ el: '#app' , render(c) { return c(App); }, router });
改造App.vue组件,在 template 中,添加router-link和router-view:
1 2 3 4 5 6 7 8 <router-link to="/login" >登录</router-link> <router-link to="/ register">注册</router-link> <router-view></router-view>
这一步很容易放在index.html中#app下,这样是错的注意:
App 这个组件,是通过 VM 实例的 render 函数,渲染出来的, render 函数如果要渲染 组件, 渲染出来的组件,只能放到 el: ‘#app’ 所指定的 元素中;
login和register这两个组件 是通过 路由匹配监听到的,所以, 这两个组件,只能展示到 属于 路由的 <router-view></router-view> 中去;
2. 结合webpack实现children子路由(路由嵌套) 这个时候避免代码看起来乱,于是新建一个router.js文件,里面用来储存路由1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import VueRouter from 'vue-router' import account from './main/Account.vue' import goodslist from './main/GoodsList.vue' import login from './subcom/login.vue' import register from './subcom/register.vue' var router = new VueRouter({ routes: [ { path: '/account' , component: account, children: [ { path : 'login' , component : login }, { path : 'register' , component : register } ] }, { path : '/goodslist' , component : goodslist } ] }) export default router
在main.js中只需要导出router计科1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) import app from './App.vue' import router from './router.js' var vm = new Vue({ el: '#app' , render: c => c(app), router })
在要嵌套的vue组件中写上router-link1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <template > <div > <h1 > 这是 Account 组件</h1 > <router-link to ="/account/login" > 登录</router-link > <router-link to ="/account/register" > 注册</router-link > <router-view > </router-view > </div > </template > <script > </script > <style lang ="scss" scoped > // 只要 咱们的 style 标签, 是在 .vue 组件中定义的,那么,推荐都为 style 开启 scoped 属性 body { div { font-style: italic; } } </style >
注意 样式的scoped属性是通过css的属性选择器实现的