上节回顾
一个月的期限马上要到了,真是弹指一瞬间的匆匆...
上节主要记录了我从子组件修改父组件
传递过来的prop值得一个思路过程
由于近期对于权限控制方面有一定的需求,所以去了解了一下vuex
与vue-router
,那么今天就来总结一下关于vue-router
的一些已有的认识,并且有时间的话进行一下系统的学习
本节目标
总结vue-router
基于vue-cli
项目的安装及简单使用
1.安装
npm install vue-router
2.目录
通常来说路由都存放在一个单独的.js
文件,路径如下:
src - router - index.js
我的index.js
现有代码如下:
import Vue from 'vue'
import Router from 'vue-router'
import Frame from '@/components/frame'
import StudentList from '@/components/student/student-list'
import StudentAdd from '@/components/student/student-add'
import DemoSlot from '@/components/demo/demo-slot'
import DemoPage from '@/components/demo/demo-page'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
component: Frame,
children: [
{
path: '/student/list',
component: StudentList
},
{
path: '/student/add',
component: StudentAdd
},
{
path: '/demo/slot',
component: DemoSlot
},
{
path: '/demo/page',
component: DemoPage
}
]
}
]
})
3.引入
路由创建好了,那么接着就应该将整理好的路由与项目关联起来啦
只有两个操作点:
- import进来
- 挂在vue实例上
我们打开src - main.js
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App'
import router from './router'
Vue.use(ElementUI)
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
4.使用
现在,凡是在路由组件中配置过的路由记录,现在都可以被导航啦
注:没有配置过的路由记录是不可以被导航的
4-1.路由基础用法:
1.<router-link to="/student/list" tag="div">学员列表</router-link>
意思是通过路由导航到/student/list
记录点,to
设置目标路由记录点,tag="div"
表示router-link
最终会呈现为一个div
元素
通过向根实例传入router实例,router会注入到每个组件中,可以通过:this.$router
在各个组件当中获取router的实例
2.
例如:
this.$router.push()
进行编程式导航
this.$router.go()
前进后退等
5.hash与history
简单来理解的话:
hash
:url中带有#
,并且只修改#之后的url
,默认情况下vue-router是hash模式
history
:url中不带#,使用history.pushState
完成跳转并且需要后台配合
使用,使用history模式需要显式指定
不过两者的跳转都不会使页面重新加载
6.守卫
6.1.种类
守卫总共分为:全局守卫
、路由守卫
、组件守卫
三种
意思就是分三个区域,全局区域
,路由区域
,组件区域
,很明显是作用域不同
全局守卫分3个:前置beforeEach
、后置afterEach
、解析beforeResolve
路由独享守卫:进入前beforeEnter
组件守卫:进入(组件对应)路由前beforeRouteEnter
、路由改变前(组件复用时)beforeRouteUpdate
、离开(组件对应)路由前beforeRouteLeave
守卫执行顺序:导航解析流程
附一张我自己的理解:
注:带有next的守卫一定要调用next()
6.2.应用场景
前些天在做权限时通过查找资料,最终发现通过全局前置守卫
,可以实现一些权限控制
的功能,当然他并不能独立完成需要配合vuex
来使用
7.meta 路由元数据
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
children: [
{
path: 'bar',
component: Bar,
// a meta field
meta: { requiresAuth: true }
}
]
}
]
})
注:meta很有用的,例如我们可以通过为路由记录添加meta信息来代表该路由所代表的功能模块代码,在addRoutes时判断是否有权限加载此路由记录
8.路由懒加载
由于我们使用的是SPA的方式开发网页,那么有一个庞大的js文件是可想而知的
路由懒加载即是为了降低不必要的开销,在路由被访问时才真正的去加载它
用法:
const Foo = () => import('./Foo.vue')
只修改了引入方式,使用方式并没有改变
const router = new VueRouter({
routes: [
{ path: '/foo', component: Foo }
]
})
9.addRoutes 动态添加路由
用法:
假设我们有如下路由:
var router = new Router({
routes: [
{
path: '/',
component: Frame,
]
}
]
})
并且有如下数组:
var routes = [{
path: '/index',
name: '首页',
component: 组件,
children: [{
path: 'page1',
component: 组件1
}, {
path: 'page2',
component: 组件2
}]
那么可以:
router.addRoutes(routes)
之后就可以成功的导航到新增的三个路由记录啦
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。