vue-router 3.0版本中 router.push 不能刷新頁面的問題

在 github 的 vue-router 中找到一樣的一個問題:
3.0.1版本經過router實例沒法跳轉javascript

昨天發現有些路由不能正常跳轉,找了一下發現都是那些實例化後使用 router.push 而不是直接使用 this.$router.push 的地方。
出現的狀況是 router.push 後,url變化了,可是頁面沒有刷新,手動刷新一下才出現應有的畫面。vue

我看了一下 package.json,個人 vue 和 axios 是沒有寫版本號,但 vue-router 明明寫了版本號,怎麼可能之前行的,如今就不行了呢?java

而後,我使用 npm view vue-router 查看後才發現使用的已經不是 package.json 中的版本了,因而判定也許是我前幾天 npm update 了!ios

( 之後不要隨便 update 了! )git

具體爲何新版本不行了,我也不太清楚。
最簡單的解決辦法固然是直接把 router.push 改爲 this.$router.pushgithub

可是,若是這樣能夠的話,我當初爲何要在組件內再實例化一個 Router 呢?
顯然是由於有些地方的 this 並非 vue,那麼,再實例化一個 vue,而後使用 vue.$router 行嗎?
答案固然是不行的,由於這個 vue 與 其它地方的 vue 應該又不是同一個對象了。vue-router

那麼,終極的解決方案就是:
把全局的 vue 中的 router 加到 window 中,也就在 main.js 中使用:npm

window.router=router

而後其它任何地方就能夠直接愉快地使用 router.push 等 router 的方法了。json

分析緣由:
實例後的 router 不能刷新頁面,應該是由於它與全局的vue中的 this.$router 的不是同一個,而以前的版本中能直接這樣使用,應該是使用了單例。
至於爲何不使用單例了,這個我怎麼會知道?axios

相關文章
相關標籤/搜索