Vue-router入门
技术胖原文链接
vue-router是一个插件包,所以我们还是需要用npm来进行安装的。打开命令行工具,进入你的项目目录,输入下面命令。
npm install vue-router --save-dev
importVuefrom'vue'//引入Vue
importRouterfrom'vue-router'//引入vue-router
importHellofrom'@/components/Hello'//引入根目录下的Hello.vue组件
Vue.use(Router)//Vue全局使用Router
exportdefaultnewRouter({
routes: [//配置路由,这里是个数组
{
//每一个链接都是一个对象path:'/',
//链接路径name:'Hello',
//路由名称,component: Hello//对应的组件模板
}
]
})
**常用语法**
<router-link to="/">[显示字段]</router-link>
<p>{{ $route.name}}</p>
<router-link :to="{name:xxx,params:{key:value}}">valueString</router-link>
{{$route.params.username}}
<router-view ></router-view>
<router-view name="left"></router-view>
{ path: '/', components: { default:Hello, left:Hi1, right:Hi2 } }
{ path:'/params/:newsId/:newsTitle', component:Params }
path:'/params/:newsId(\\d+)/:newsTitle',
{ path: '/hi1',component: Hi1,alias:'/jspang' } 别名
**切换效果 **
想让路由有过渡动画,需要在<router-view>标签的外部添加<transition>标签,标签还需要一个name属性。
<transition name="fade"> <router-view ></router-view> </transition>
** css过渡类名 **
组件过渡过程中,会有四个CSS类名进行切换,这四个类名与transition的name属性有关,比如name=”fade”,会有如下四个CSS类名:
fade-enter:进入过渡的开始状态,元素被插入时生效,只应用一帧后立刻删除。
fade-enter-active:进入过渡的结束状态,元素被插入时就生效,在过渡过程完成后移除。
fade-leave:离开过渡的开始状态,元素被删除时触发,只应用一帧后立刻删除。
fade-leave-active:离开过渡的结束状态,元素被删除时生效,离开过渡完成后被删除。
从上面四个类名可以看出,fade-enter-active和fade-leave-active在整个进入或离开过程中都有效,所以CSS的transition属性在这两个类下进行设置。
**过渡模式mode**
in-out:新元素先进入过渡,完成之后当前元素过渡离开。
out-in:当前元素先进行过渡离开,离开完成后新元素过渡进入。
**mode的两个值**
histroy:当你使用 history 模式时,URL 就像正常的 url,例如 http://jsapng.com/lms/,也好看!
hash:默认’hash’值,但是hash看起来就像无意义的字符排列,不太好看也不符合我们一般的网址浏览习惯。
**404页面**
{ path:'*', component:Error }
** 路由配置文件中的钩子函数 **
我们可以直接在路由配置文件(/src/router/index.js)中写钩子函数。但是在路由文件中我们只能写一个beforeEnter,就是在进入此路由配置时。先来看一段具体的代码:
{ //进入路由
path:'/params/:newsId(\\d+)/:newsTitle',
component:Params,
beforeEnter:(to,from,next)=>{
console.log('我进入了params模板');
console.log(to);
console.log(from);
next(); 执行跳转
next(false); 不跳转
next({path:‘/’}); 跳转到首页
}
},
三个参数:
to:路由将要跳转的路径信息,信息是包含在对像里边的。
from:路径跳转前的路径信息,也是一个对象的形式。
next:路由的控制参数,常用的有next(true)和next(false)。
**模板路由狗子函数**
export default {
name: 'params',
data () {
return {
msg: 'params page' }
},
beforeRouteEnter:(to,from,next)=>{
console.log("准备进入路由模板");
next();
},
beforeRouteLeave: (to,from,next)=> {
console.log("准备离开路由模板");
next();
}
}
**编程式导航**
this.$router.go(-1) 和 this.$router.go(1)
这两个编程式导航的意思是后退和前进,功能跟我们浏览器上的后退和前进按钮一样,这在业务逻辑中经常用到。比如条件不满足时,我们需要后退。
router.go(-1)代表着后退,我们可以让我们的导航进行后退,并且我们的地址栏也是有所变化的。
router.go(1):代表着前进,用法和后退一样,我在这里就不重复码字了(码字辛苦希望大家理解)。
this.$router.push(‘/xxx ‘)
这个编程式导航都作用就是跳转,比如我们判断用户名和密码正确时,需要跳转到用户中心页面或者首页,都用到这个编程的方法来操作路由。
this.$router.push传递参数有2种方式:
传递参数 – this.$router.push({path: ’ 路由 ', query: {key: value}})
参数取值 – this.$route.query.key
使用这种方式,传递参数会拼接在路由后面,出现在地址栏.
传递参数 – this.$router.push({name: ’ 路由的name ', params: {key: value}})
参数取值 – this.$route.params.key
使用这种方式,参数不会拼接在路由后面,地址栏上看不到参数…
动态路由也是传递params的,所以在 this.$router.push() 方法中 path不能和params一起使用,否则params将无效。需要用name来指定页面。