vue-router组件内的导航守卫
2019-06-04 14:17
369 查看
【示例】:
用户进入user组件之前取路由值执行alert
用户改变query参数,触发alert(等价于watch $route)
<script> export default { name: "User", mounted:function(){ console.log('mounted') }, // watch: { // // 如果路由有变化,会再次执行该方法 // '$route': 'fetchData' // }, methods:{ fetchData:function () { alert('change!') }, userAlert:function (name) { alert(`查看${name}的用户界面`) } }, beforeRouteEnter(to,from,next) { console.log('User.vue:before route enter invoked'); next(vm=>{ vm.userAlert(to.params.name);//导航之前获取路由数据并执行方法 }); }, beforeRouteUpdate(to,from,next) {//此处有this,等效于watch,每次路由参数更新触发 console.log('User.vue:before route update invoked'); // alert('changed') this.fetchData(); next(); }, beforeRouteLeave(to,from,next) { console.log('User.vue:before route leave invoked'); next(); }, } </script>
beforeRouteEnter用来在导航之前获取路由里的params/query,并作出处理,如据此向获取数据等。这里只是给它alter出来。注意:此刻还没有this,要使用回调函数
beforeRouteUpdate用于监控组件内路由变化时,比如params或query的改变,并据其做出一些响应,等价于watch(代码里的备注内容)。已经有this了,因为之前挂载过了,现在只是更新,直接执行this.XXX();
beforeRouteLeave离开该组件时,如果是一个很大表单,用于当填写信息,不小心按了其他键要离开该组件时,给用户一个提醒判断,要不要离开。不离开不执行next(),给应用提供一些安全性。比如:
beforeRouteLeave(to,from,next) { console.log('User.vue:before route leave invoked'); const answer = window.confirm('Do you really want to leave? you have unsaved changes!') if (answer) { next() } else { next(false)//important!不可以什么都不写,什么都不写会发生地址栏路由改变界面不变 } },
效果如下:
想到其他用处会再补充
相关文章推荐
- Vue Router导航守卫
- vue-router之导航守卫
- vue-router 导航守卫
- Vue(router,导航守卫,slot插槽)
- vue-router 实现导航守卫(路由卫士)的实例代码
- vue router beforeEach 导航钩子(导航守卫)
- 关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
- Vue-router---导航钩子(导航守卫)
- VueRouter导航守卫用法详解
- 详解vue-router导航守卫
- 使用 vue-router 之导航守卫 + meta 实现不同的用户角色具有不同的页面访问权限的功能
- vue-router 导航守卫处理登录问题
- VueJs(12)---vue-router(导航守卫,路由元信息,获取数据)
- Vue-Router导航守卫调用顺序(带图)
- Vue.js路由组件vue-router使用方法详解
- Vue 组件之 Router
- vue-router 2.0 常用基础知识点之导航钩子
- vue-router 如何在当前路由下重新点击当前路由的router-link实现刷新 组件重新渲染
- 说说 vue-router 组件的高级应用
- 用Vue.js 和 vue-router 创建单页导航和分页