自己 做网站,wordpress源代码下载,广州10大网站服务品牌,莱芜金点子最新招工信息目录
一. 路由监听方式#xff1a; 通过 watch 进行监听
1. 监听路由从哪儿来到哪儿去
2. 监听路由变化获取新老路由信息
3. 监听路由变化触发方法
4. 监听路由的 path 变化
5. 监听路由的 path 变化, 使用handler函数
6. 监听路由的 path 变化#xff0c;触发method…目录
一. 路由监听方式 通过 watch 进行监听
1. 监听路由从哪儿来到哪儿去
2. 监听路由变化获取新老路由信息
3. 监听路由变化触发方法
4. 监听路由的 path 变化
5. 监听路由的 path 变化, 使用handler函数
6. 监听路由的 path 变化触发methods里的方法
二. 路由监听方式key是用来阻止“复用”的
三. 路由监听方式通过vue-router的钩子函数
1. 组件内监听
2. 全局监听路由 参考资料 vue页面开发中我们经常需要根据路由的变化去实现一些操作那么vue.js中如何监听路由的变化呢监听路由变化的方法都有哪些这篇文章主要介绍了vue监听路由变化的几种方式小结具有很好的参考价值希望对大家有所帮助。如有错误或未考虑完全的地方望不吝赐教 —— vue中路由参数的变化监听这里总结了常用的几种方式 ——
一. 路由监听方式 通过 watch 进行监听
1. 监听路由从哪儿来到哪儿去
返回 “从哪里来” 和 “哪里去” 的路由信息
// 方式1、监听路由 $route 变化
export default{watch: { // 监听当路由发生变化的时候执行$route(to, from){console.log(路由变化了)console.log(当前页面路由 to);console.log(上一个路由 from);// console.log(from.path); // 从哪来// console.log(to.path); // 到哪去},}
}
2. 监听路由变化获取新老路由信息
返回 “新” “老” 路由信息
// 方式2、监听路由 $route 变化, 使用handler函数
export default{watch: { // 监听,当路由发生变化的时候执行$route: { // $route可以用引号也可以不用引号handler(to, from){console.log(路由变化了)console.log(当前页面路由 to); //新路由信息console.log(上一个路由 from); //老路由信息},deep: true, // 深度观察监听immediate: true, // 第一次初始化渲染就可以监听到}}
} 如果我们需要在最初绑定值的时侯也执行监听函数则就需要用到immediate属性。 ✔️ 当设置immediate属性为true时无论值是否发生改变时刻都会监听 ✔️ 当设置immediate属性为false时常规用法只有值发生改变才会监听。 参考Vue中watch(监听器)的用法详解(通俗易懂简单明了) 3. 监听路由变化触发方法
// 方式3、监听路由 $route 变化触发methods里的方法
export default{watch: { // 监听,当路由发生变化的时候执行$route:getPath},methods: {getPath(){console.log(this.$route.path);}}}
4. 监听路由的 path 变化
// 方式4、监听路由的 path 变化
export default{watch: { // 监听,当路由发生变化的时候执行$route.path(toPath, fromPath){console.log(路由变化了)console.log(当前页面路由地址 toPath)console.log(上一个路由地址 fromPath)},}
}
5. 监听路由的 path 变化, 使用handler函数
// 方式5、监听路由的 path 变化, 使用handler函数
export default{watch: { // 监听,当路由发生变化的时候执行$route.path: {handler(toPath, fromPath){console.log(路由变化了)console.log(当前页面路由地址 toPath)console.log(上一个路由地址 fromPath)},deep: true, // 深度监听immediate: true, // 第一次初始化渲染就可以监听到}}
}
6. 监听路由的 path 变化触发methods里的方法
// 方式6、监听路由的 path 变化,触发methods里的方法
export default{watch: { // 监听,当路由发生变化的时候执行$route.path: getpath},methods: {getpath(){console.log(路由变化了)}}
}
二. 路由监听方式key是用来阻止“复用”的
Vue 为你提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可(Vue文档原话)
router-view :keykey/router-view
computed: {key(){return this.$route.name ! undefined? this.$route.name new Date(): this.$route new Date()}
}
使用computed属性和Date()可以保证每一次的key都是不同的这样就可以如愿刷新数据了。
三. 路由监听方式通过vue-router的钩子函数
1. 组件内监听 ❓ 如何在组件中监听路由参数的变化❓ 当使用路由参数时例如从 /user/foo 导航到 /user/bar原来的组件实例会被复用。 因为两个路由都渲染同个组件比起销毁再创建复用则显得更加高效。不过这也意味着组件的生命周期钩子不会再被调用。 那如果我们要在组件中监听路由参数的变化就只能通过watch (监测变化) $route 对象或使用 beforeRouteUpdate 的组件内守卫。方式一: 通过watch 监听 $route const User {template: ...,watch: {$route(to, from) {// 对路由变化作出响应...}}
} 方式二通过组件内的导航守卫 beforeRouteUpdate ,和created(){}生命周期函数同级别) const User {template: ...,beforeRouteUpdate(to, from, next) {// react to route changes...// dont forget to call next()}
} ⏬ 通过vue-router的组件内钩子函数beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave进行监听
示例1
export default{// 监听,当路由发生变化的时候执行beforeRouteEnter(to, from, next){// 在渲染该组件的对应路由被确认前调用这个钩子// 不能获取组件实例 this// 因为当钩子执行前(也就是说我们使用的是进入路由之前的钩子)那时组件实例还没被创建所以不能获取this自然这里就不能使用thisconsole.log(this) // 结果为undefinedconsole.log(beforeRouteEnter)next()},// 监听,当路由发生变化的时候执行beforeRouteUpdate(to, from, next){// 在当前路由改变但是该组件被复用时调用// 举例来说对于一个带有动态参数的路径 /foo/:id在 /foo/1 和 /foo/2 之间跳转的时候// 由于会渲染同样的 Foo 组件因此组件实例会被复用。而这个钩子就会在这个情况下被调用。// 可以访问组件实例 thisconsole.log(this) // 可以访问thisconsole.log(beforeRouteUpdate)next()},// 监听,当路由发生变化的时候执行beforeRouteLeave(to, from, next){// 导航离开当前路由的时候被调用this可以被访问到console.log(this) // 可以访问组件实例 thisconsole.log(beforeRouteLeave)next()},
}
示例2
script// 引入 Tabbar组件import mTabbar from ./components/Tabbarimport mTabbarItem from ./components/TabbarItem// 引入 vuex 的两个方法import {mapGetters, mapActions} from vuexexport default {name: app,// 计算属性computed:mapGetters([// 从 getters 中获取值tabbarShow]),// 监听,当路由发生变化的时候执行watch:{$route(to,from){if(to.path / || to.path /Prisoner || to.path /Goods ||to.path /Time || to.path /Mine){/*** $store来自Store对象* dispatch 向 actions 发起请求*/this.$store.dispatch(showTabBar);}else{this.$store.dispatch(hideTabBar);}}},beforeRouteEnter (to, from, next) {// 在渲染该组件的对应路由被 confirm 前调用// 不能获取组件实例 this// 因为当钩子执行前组件实例还没被创建},beforeRouteUpdate (to, from, next) {// 在当前路由改变但是该组件被复用时调用// 举例来说对于一个带有动态参数的路径 /foo/:id在 /foo/1 和 /foo/2 之间跳转的时候// 由于会渲染同样的 Foo 组件因此组件实例会被复用。而这个钩子就会在这个情况下被调用。// 可以访问组件实例 this},beforeRouteLeave (to, from, next) {// 导航离开该组件的对应路由时调用// 可以访问组件实例 this},components:{mTabbar,mTabbarItem},data() {return {select:Building}}}
/script
2. 全局监听路由
⏬ 通过vue-router的全局钩子函数beforeEach——this.$router.beforeEach
// 方式1、在App.vue的create中进行全局路由监听
export default {name: App,created() {this.$router.beforeEach((to, from, next) {console.log(to);console.log(from);next()})}
}
// 方式2、在路由文件/router/index.js中进行全局路由监听
import Vue from vue
import Router from vue-router
Vue.use(Router)let routes [{path: /login,component: resolve require([/views/login], resolve),},
]let router new Router({mode: history, // 去掉 url 中的 #scrollBehavior: () ({ y: 0 }),base: process.env.VUE_APP_BASE_DOMAIN,routes,
})router.beforeEach((to, from, next) {console.log(to);console.log(from);next()
})export {routesrouter
} 参考资料
Vue监听路由变化的几种方式小结Vue.js怎么监听路由变化Vue路由监听的方式Vue几种监听路由变化的方式