鍍金池/ 問(wèn)答/HTML/ vue.js實(shí)現(xiàn)兩個(gè)頁(yè)面之間的通信

vue.js實(shí)現(xiàn)兩個(gè)頁(yè)面之間的通信

用vue.js寫(xiě)的
頁(yè)面A有個(gè)item列表,點(diǎn)擊任何一個(gè)item前往該item的詳情頁(yè)面
詳情頁(yè)面的地址為 /item/id,id是每一個(gè)item的id。
我需要在詳情頁(yè)面獲取到這個(gè)id的值。

我先是在詳情頁(yè)用 let id=location.href.split試圖去截取地址欄中的id,這樣做如果我直接訪(fǎng)問(wèn)詳情頁(yè)是ok的。但是我如果在頁(yè)面A點(diǎn)擊item來(lái)訪(fǎng)問(wèn)詳情頁(yè)的話(huà)就不行,因?yàn)辄c(diǎn)擊過(guò)來(lái)的時(shí)候這里的href還是頁(yè)面A不是詳情頁(yè)。

請(qǐng)問(wèn)有什么合適的方法能實(shí)現(xiàn)我想要的效果呢?前端新手請(qǐng)大佬們指點(diǎn)一下,謝謝了。

不好意思不好意思我之前忘記說(shuō)了不可用vue的動(dòng)態(tài)路由,這個(gè)項(xiàng)目的路由是用的別的框架的。

回答
編輯回答
夏夕

你說(shuō)的情況是沒(méi)有做成spa吧?
spa直接使用vue vuex vue-router全家桶
多頁(yè)面的話(huà)提供幾個(gè)思路,復(fù)雜度從高到底:

  • 服務(wù)端用node做后端渲染
  • 使用后端路由,node、php等,然后如果沒(méi)有seo需求,你在頁(yè)面嵌入vue
  • 跳轉(zhuǎn)時(shí)在使用querystring,例如/item?id=1,還可以存在cookie和localstorage里,不過(guò)不推薦
2017年12月31日 16:23
編輯回答
替身

使用vue-router的動(dòng)態(tài)路由匹配,參考https://router.vuejs.org/zh-c...

用這種方式,定義路由,比如:

const List = {
  template: '<div>List</div>'
}
const Detail = {
  template: '<div>Detail</div>'
}

const router = new VueRouter({
  routes: [
    // 動(dòng)態(tài)路徑參數(shù) 以冒號(hào)開(kāi)頭
    { path: '/lists', component: List },
    { path: '/lists/:id', component: Detail }
  ]
})

然后在detail頁(yè)面中,通過(guò)this.$route.params.id來(lái)獲取id,不需要通過(guò)split去獲取

2017年4月15日 16:43
編輯回答
詆毀你

可以使用vue-router傳遞參數(shù)

// 頁(yè)面A
methods: {
    toDetail() {
        this.$router.push({
            path: 'xxx',
            params: { id: xxx }
        })
    }
}

// 詳情頁(yè)
methods: {
    getId() {
        this.id = this.$route.params.id
    }
}
2018年2月5日 15:00