[英]Run mutation on Route change VueJS?
所以我正在使用 Vuex 並設置了一個簡單的突變設置,該控制台記錄一條消息。 我有兩個路由設置, /
去我的 HelloWorld 組件和/another
去另一個世界組件。 我正在嘗試在我的route
上設置一個watch
,以便當路線改變時,它會觸發突變。 我確實設置了一塊watch
,但它似乎並沒有觸發我的突變。
看看這個CodeSandbox 。
查看代碼片段:-
這是我的 Vuex 商店:-
mutations: {
routeChange() {
console.log("Helloooo!!!!!");
}
這是我的 Hello World 組件:-
<template>
<div>
<h1>Hello World!!!</h1>
<router-link to="/another">Switch</router-link>
</div>
</template>
<script>
export default {
name: "HelloWorld",
watch: {
$route(to, from) {
this.$store.commit("routeChange");
}
}
};
</script>
這是我的另一個世界組件:-
<template>
<div>
<h1>Another World</h1>
<router-link to="/">Back</router-link>
</div>
</template>
<script>
export default {};
</script>
如您所見,我已經設置了手表,但它似乎沒有做任何事情。 任何幫助將不勝感激。 謝謝你。
如果您將觀察者放在單個路由組件中,它們將永遠不會觸發,因為 $route 在這些組件實例化之前設置,然后在這些組件銷毀后更改。
您要么需要將手表放在 App.vue ( <router-view>
父級)中,要么從 vue-router 保護之一( https://router.vuejs.org/guide/advanced/navigation-guards 提交。 html )
我會在您的路由器中使用全局后掛鈎導航防護。
例如
// router.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '../store'
Vue.use(VueRouter)
const router = new VueRouter({
routes: [...]
})
router.afterEach(() => {
store.commit('routeChange')
})
export default router
如果您只想捕獲遠離某些組件的路線導航,您可以使用組件內的beforeRouteLeave
保護
// MyComponent.vue
export default {
name: 'MyComponent',
beforeRouteLeave (to, from, next) {
this.$store.commit('routeChange')
next()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.