iT邦幫忙

0

Vue router query 物件會消失

  • 分享至 

  • xImage

我舉個例子簡單描述我的問題
我有三個vue頁面(home、page1、page2)

home有一顆按鈕按下去導到page1

page1有兩顆按鈕
一顆是要導到page2的
一顆是要做回到上一頁(home)

page2只有一顆回到上一頁的按鈕

home會傳遞一個object給page1

以下是我如何跳頁與傳遞參數的方法

home:

<!--
這邊item的內容大概長這樣
item:{
    id:1,
    name:'test',
    content:'test,test'
    .....
    .....
}
-->
<div>
  Home
</div>

<buttom @click="$router.puth({name:'page1', query:{'item': item})">Go Page1</buttom>


<script>
    export default {
        name: "home",
        data() {
        }
        created() {
        }
    }
</script>

page1:

<div>
  Page1<br>
  <!--這頁會顯示item的內容-->
  {{item}}
</div>

<buttom @click="$router.puth({name:'page2')">Go Page2</buttom>

<buttom @click="$router.go(-1)">Go Back</buttom>

<script>
    export default {
        name: "page1",
        data() {
            item: this.$route.query.item,
        }
        created() {
        }
    }
</script>

page2:

<div>
  Page2
</div>

<buttom @click="$router.go(-1)">Go Back</buttom>

<script>
    export default {
        name: "page2",
        data() {
        }
        created() {
        }
    }
</script>

問題來了
這邊我有試過
如果不傳遞object
而單單只有傳遞一組id
例如

$router.puth({name:'page1', query:{'id': 123})

當我頁面到了page2後按上一頁
回到page1
並console這個id
id的值還會存在

但是當我傳遞object
卻不能有同等效果

這是為什麼?
有什麼方法可以解決?當我回上頁後可以真的回到上頁狀態(保留item內容)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
EN
iT邦好手 1 級 ‧ 2021-01-07 09:45:23
最佳解答
  1. 要保留頁面狀態可以使用 keep-alive
  2. 既然只有 page1 能進入 page2 ,那建議你不要使用 go(-1) 而是讓 page2 的按鈕導向 page1 就可以了。
  3. 雖然 p1 傳給 p2 的參數內容一樣,但兩者是獨立的,若要保持兩者同步請改用 emit 或是狀態管理 Vuex (建議用 Vuex)。
0

我只會告訴你一件事。

永遠都不要相信上一頁會正常。無論任何瀏覽器。
由其在vue上,更不要這樣幹。

但真的要有上一頁功能怎麼辦??
就來個「請求」上一頁的方式。

千萬不要用go(-1)的方式來回上一頁。

至於要怎麼做到「請求」上一頁。就自行思考吧。

我要發表回答

立即登入回答