1.router–index.js文件各配置作用
mode:默认为hash模式,不方便使用history.pushState
linkActiveClass:用于将渲染出来的html文件中的router-link-active|Class替换成active,便于代码维护
1 | import Vue from 'vue' |
2.router跳转方式
1.html中
1 | <router-link to="/home" tag="button" replace>首页</router-link> |
- to指向要跳转的页面
- tag表示要渲染成的标签类型
- replace表示是否可以前进后退
2.js中
1 | this.$router.push('/home'); |
push()**和replace()**的区别
push可以通过浏览器左上方的前进后退记录,原理跟栈差不多
replace不行
3.动态路由
1.添加
1 | <router-link :to="'/user/'+userId" tag="button" replace>用户</router-link> |
1 | data: function(){ |
这里to属性需要使用冒号修饰,保证可以使用data中的属性
2.子组件获取路由参数
使用this.$route.params.userId获取
3.router和route的区别
router是指整个对象
route是指当前活跃的路由对象
4.路由懒加载写法
1.结合vue异步组件和Webpack的代码分析(过于复杂,不推荐)
2.AMD写法
1 | const Home = resolve => require(['../components/Home.vue'],resolve); |
3.ES6写法(推荐)
1 | const Home = () => import('../components/Home.vue'); |
5.路由传参
1.使用query方式传参(复杂对象)
父组件中
1 | <router-link :to="{path:'/profile',query:{name: 'Jamie',age:'22',height:'1.70'}}" tag="button" replace>档案</router-link> |
子组件中
1 | <template> |
2.使用params方式传参(简单参数)
父组件中
1 | <router-link :to="''/user/'+userId" tag="button" replace>用户</router-link> |
子组件中d
1 | this.$route.params.userId |
6.守卫导航
使用方法:
在**/router->index.js中,覆盖了router组件的beforeEach**生命周期函数
1 | router.beforeEach((to, from, next) => { |
7.路由使用实例1
切换到兄弟组件时,保存当前组件中子组件的选中状态,下次返回该组件的时候访问该子组件
1 | export default{ |
bug合集
1.使用click方式跳转同个路由的时候路由器控制台会爆红
原因:
阻止多余的同名路由跳转,节省浏览器资源
解决方法:
跳转路由的时候,多加一层判定,判断原路由与目标路由是否相同,若不同则切换路由
1 | if(this.$route.path != nextPath){ |
无法理解的部分
关于router源码部分在视频第113集