【需求】
要實現(xiàn)的需求很簡單,頁面從A -> B,用戶在B觸發(fā)操作,將一些數(shù)據(jù)帶回到A頁面,在網(wǎng)上找了好久也只看到有人問,但總找不到很好答案。要實現(xiàn)的效果圖如下:

【聯(lián)想】
在 ios 開發(fā)中,頁面跳轉(zhuǎn) A -> B -> C,到 C 頁面后,內(nèi)存中一直存儲著 A 和 B 頁面的數(shù)據(jù)和狀態(tài),通過導(dǎo)航堆棧遍歷數(shù)組可以拿到之前的頁面進行修改賦值等,另外還有代理,block傳值等操作。
vue是一個單頁應(yīng)用,輕量,并且不會重復(fù)下載數(shù)據(jù)。當它從一個頁面跳轉(zhuǎn)到另一個頁面時,原來的頁面的vue實例和相關(guān)數(shù)據(jù)已經(jīng)銷毀了,要實現(xiàn)逆?zhèn)髦稻鸵业讲僮鞯膶ο蠹八囊恍傩浴?/p>
【嘗試】
在 three 頁面中打印路由相關(guān)信息,如下:

本來是想在其對象中查看是否有可操作的對象,但發(fā)現(xiàn)都不好操作甚至太麻煩,并不像 ios 中一樣。然后嘗試對其中一些對象 prototype 或 __proto__ 主動添加想要存儲的數(shù)據(jù),實際結(jié)果也是要么報錯不通過,要么路由切換時數(shù)據(jù)就沒了。
這兩天又重新看了看vue的官網(wǎng)指導(dǎo),發(fā)現(xiàn)除了全局路由有對應(yīng)的時機方法,對于組件路由也有幾個對應(yīng)的鉤子函數(shù)。
在第三個頁面中實現(xiàn) beforeRouteLeave,打印對應(yīng)的參數(shù)發(fā)現(xiàn)確實可以拿到前后路由。如下:

【相關(guān)代碼】
/three 頁面中的 input 與變量 selVal 綁定,然后在此頁面的路由方法中,判斷如果是回第二個頁面,則將要傳的參數(shù)賦值到對應(yīng)query 或 params中,params 中的數(shù)值如果用戶刷新當前頁面參數(shù)值會丟失,而query則是拼接在 url 后面,刷新頁面值也不會丟失。如下:
beforeRouteLeave(to, from, next) { if (to.name == 'Two') { to.query.temp = this.selVal; } next(); }在 /two 頁面的 mounted 方法中獲取相應(yīng)的值
mounted() { if (this.$route.query.temp) { this.temp = this.$route.query.temp; } }這樣就完了,真想說句靠,怎么原來就沒發(fā)現(xiàn)呢,之前實現(xiàn)這些還想著 keepalive 或使用 vuex 等等,想想那樣麻煩多了。
ps: 這種簡單的逆?zhèn)髦凳沁@樣實現(xiàn)沒錯,但如果 /two 頁面在進入 /three 頁面之前用戶進行了大量臨時性操作,到 /three 頁頁回來還需要繼續(xù)保持這些大量的操作就比較困難了,這個就等下期博客貼出來了。
總結(jié)
以上所述是小編給大家介紹的在vue中實現(xiàn)簡單頁面逆?zhèn)髦档姆椒ǎM麑Υ蠹矣兴鶐椭绻蠹矣腥魏我蓡栒埥o我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
新聞熱點
疑難解答