Vue-router的核心概念

313 阅读2分钟

Vue-router是什么?

vue-router 是 Vue 官方推荐的路由,让用 Vue.js 构建单页应用变得轻而易举。

路由和路由器

路由(route)是路径和组件的键值对应关系,路由器(router)是路由的中枢,用来分配路由。

我们可以在每个 Vue 实例上发现 $route,$router 属性,每个实例的 $route(路由) 是不一样,而 $router(路由器) 是一样的共享的。在 $router 上有关于该路由的信息,$router 上挂着很多有用的API

##router-link和编程式 router-link并非常规的 a 标签不会在跳转时刷新页面。

router-link 有 to 属性,to 可以等于一个路径字符串,也可以等于一个对象,下面两者是等同的

<router-link to="/user/123" />
// name是路由器为路由注册的name
<router-link :to="{ name: 'user', params: { userId: '123' }}" /> 

router-link 的本质是调用了 this.$router.push('/user'),点击链接会复制当前路径并 push 一个路径得到新的路径。因此,保存这之前的路径记录,所以你可以返回到上一个路径。但是还有另一个方法 this.$router.repalce('/user'), 他的不同时直接删去旧的路径换为新的,因此无法再返回到上一层路径。router-link 默认调用的 push 方法,除非

<router-link :replace="true" to="/user/123" />

你没看到的页面还存在吗?

当从一个组件跳转到另一个组件,那么上一个组件是否还存在呢?

答案是被销毁了,我们可以为上一个页面添加beforeDestroy()来证实猜想。

如果你希望它会活着,你就可以有keep-alive标签将它包裹以来。你也可以使用include属性来指定只有哪几个是需要‘活着’的。

为了性能,事实上我们不仅需要指定哪几个组件活着,而且你也希望在一个组件内哪部分应该活跃,那么不。activated钩子只有在页面被选中的时候才执行,deactivated则是在没有被选中时调用。

路由守卫

路由守卫,是为路由添加的一道防线。

router.beforeEach(to,from,next)是全局前置路由守卫,意味每当路由切换时就被调用。而里面的参数 to 是要去的route(路由),from 是来自的 route(路由),next 是进行跳转的函数,如果你不调用就不会跳转。

router.afterEach(to,from)是全局后置路由守卫。还有独享路由守卫,可以作为路由的配置项且仅有前置。

hash 和 history

创建router默认使用的是hash模式,路径前带一个 #。hash 模式路径不会传到服务器,而 histroy 模式会将路径传到后端。所以 history 模式下,在后端需要判断并除去路径中属于前端路径的部分。