在 github 的 vue-router 中找到一樣的一個題目:
3.0.1版本經由過程router實例沒法跳轉
昨天發明有些路由不能一般跳轉,找了一下發明都是那些實例化后運用 router.push 而不是直接運用 this.$router.push 的處所。
湧現的狀況是 router.push 后,url變化了,然則頁面沒有革新,手動革新一下才湧現應有的畫面。
我看了一下 package.json,我的 vue 和 axios 是沒有寫版本號,但 vue-router 明顯寫了版本號,怎麼可能以前行的,如今就不可了呢?
然後,我運用 npm view vue-router 查看后才發明運用的已不是 package.json 中的版本了,因而判斷也許是我頭幾天 npm update 了!
( 今後不要隨意 update 了! )
詳細為何新版本不可了,我也不太清晰。
最簡樸的解決辦法當然是直接把 router.push 改成 this.$router.push
然則,假如如許能夠的話,我當初為何要在組件內再實例化一個 Router 呢?
明顯是由於有些處所的 this 並非 vue,那末,再實例化一個 vue,然後運用 vue.$router 行嗎?
答案當然是不可的,由於這個 vue 與 別的處所的 vue 應當又不是同一個對象了。
那末,最終的解決方案就是:
把全局的 vue 中的 router 加到 window 中,也就在 main.js 中運用:
window.router=router
然後別的任何處所就能夠直接愉快地運用 router.push 等 router 的要領了。
剖析緣由:
實例后的 router 不能革新頁面,應當是由於它與全局的vue中的 this.$router 的不是同一個,而之前的版本中能直接如許運用,應當是運用了單例。
至於為何不運用單例了,這個我怎麼會曉得?