1 概述
继续vue全家桶的第二部,vue-router
2 基础
import 'babel-polyfill'
import './index.css'
import Vue from 'vue'
import VueRouter from 'vue-router'
import Foo from './foo'
import Bar from './bar'
import App from './app'
Vue.use(VueRouter);
const routes = [
{
path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
const router = new VueRouter({
routes:routes
})
new Vue({
el: '#root',
router:router,
render:(createElement)=>createElement(App)
})
将路由以js的object形式表达出来,注意,一旦Vue.use(VueRouter)以后,vue-router的一些组件就会注册到全局的地方去,例如是router-link,router-view。
<template>
<div>
<h1>Hello App!</h1>
<p>
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
<router-view></router-view>
</div>
</template>
然后以router-view来展示匹配到的路由页面,注意用router-link代替原来的a标签
可以看出,总体上像是react-router 3的写法。
3 匹配
const routes = [
{
path: '/login',
component: Login
},
{
path: '/user/:userId',
component: User
},
{
path:'/',
component:Home,
children:[
{
path:"",
component:HomeNothing
},
{
path:"/friend",
component:Friend
},
{
path:"/timeline",
component:Timeline
},
{
path:"/time",
redirect:'/timeline'
}
]
},
{
path:"*",
component:NotFound
}
]
该路由设置展示了多种的路由匹配形式
- 完全匹配,/login
- 参数匹配,/user/:userId
- 嵌套匹配,/+children的形式,注意HomeNothing的空号匹配
- 跳转与别名,redirect或alias。
- 无法匹配,*形式
当单个路径匹配多个路由时,按照路由的配置最先出现的最先匹配。
4 跳转
<router-link v-bind:to="link">Go to {{link}}</router-link>
router-link标签的跳转方式
this.$router.push('/123')
this.$router.replace('/123')
this.$router.go(-1)
js的跳转方式
5 守卫
const routes = [
{ path: '/foo', component: Foo ,meta: { requiresAuth: true }},
{ path: '/bar', component: Bar},
{ path: '/login', component: Login},
]
const router = new VueRouter({
routes:routes
})
router.beforeEach((to, from, next) => {
if (to.matched.some(record => !!record.meta.requiresAuth)) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
})
可以用全局的路由钩子,使得在跳转前加入登录检查等守卫工作。在react-router中,就只能自己用装饰器来实现了。
6 动画
<transition name="slide">
<router-view></router-view>
</transition>
<style>
.slide-enter-active{
transition: 1s;
}
.slide-leave-active {
transition: 1s;
}
.slide-enter{
position: absolute;
transform:translateX(-100%)
}
.slide-enter-to{
position: absolute;
transform: translateX(0)
}
.slide-leave{
position: absolute;
transform: translateX(0)
}
.slide-leave-to{
position: absolute;
transform:translateX(100%)
}
</style>
加入transition标签就可以了,跟vue的动画无缝连接在一起呀
7 总结
总体来说,vue-router还是相当简单易懂的,而且,加入了实际应用中常用到的功能,例如是路由守卫,路由懒加载等等。
- 本文作者: fishedee
- 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!