這次使用beforeRouterEnter來判斷是一定條件下才執行相應的頁面跳轉。
beforeRouterEnter:組件內路由,跟data,methods同級
beforeRouteEnter (to, from, next) { // 在渲染該組件的對應路由被 confirm 前調用 // 不!能!獲取組件實例 `this` // 因為當守衛執行前,組件實例還沒被創建 },
需求場景:
一個stuInfo頁面,只有第一次才會出現,一旦出現過,以后再也不會出現,即使是輸入該頁面的url也不會跳轉到該頁面,只會跳轉到指定的其他頁面;
代碼如下:
beforeRouteEnter (to, from, next) { next(vm=>{ if(vm.profileCompleted){ vm.nextReplace() } }), methods: { nextReplace(){ this.$router.replace("/") } }
思路:
在第一次進入stuInfo頁面填寫完信息提交成功后,把一個成功的狀態存儲到vuex中,上面代碼中profileComplete就是這個狀態,然后在該頁面中通過beforeRouterEnter判斷vuex中存儲的狀態來確定是不是第一次進入該頁面,在beforeRouterEnter中不能使用this,只可以使用next函數中的實例來找到vue的實例拿取狀態,要想跳轉到其他地方就需要在methods中單獨定義一個跳轉的方法,通過next找到實例調用方法。
