在我的 NuxtJS(v. 2.10.2) 应用程序中,我有一个如下所示的 URL,其中 pid
是帖子的 ID。
/post?pid=5e4844e34202d6075e593062
此 URL 工作正常并根据传递给 pid
查询参数的值加载帖子。但是,用户可以通过单击打开对话框的应用程序栏上的 Add Post
按钮来添加新帖子。一旦用户点击添加,就会向后端服务器发出请求以保存请求。一旦成功,用户将被重定向到使用 vue 路由器的新帖子 push
如下所示
.then(data => {
if (data) {
this.$router.push({ path: `/post?pid=${data.id}` });
}
})
问题是,用户没有被重定向到新帖子,只有查询参数 pid
被更新了。我怀疑 VueJS 不承认这是一个不同的 URL,因此什么都不做。
如何解决这个问题?
更新:作为替代方法,尝试了以下语法但得到了相同的行为。
this.$router.push({ path: "post", query: { pid: data.id } });
原文由 Meena Chaudhary 发布,翻译遵循 CC BY-SA 4.0 许可协议
通过更改方法组件数据可以根据新的查询字符串值进行更新。这是如何完成的。
而不是尝试使用不同的查询字符串再次推送到同一页面。可以监视查询字符串
pid
本身的变化,更新时可以获取新数据并更新组件数据。在 NuxtJS(v. 2.10.2) 应用程序中,这可以通过watchQuery
来实现。watchQuery
是一个 NuxtJS 属性,它监视对查询字符串的更改。一旦它检测到变化,就会调用所有组件方法(asyncData、fetch、validate..)。你可以阅读更多 https://nuxtjs.org/api/pages-watchquery/至于解决方案,使用新查询字符串推送到同一页面保持不变。
但是,在 page.vue 上,数据是从服务器获取的。我们需要添加
watchQuery
属性。现在,每次查询字符串
pid
将更改asyncData
将被调用。就是这样。当查询字符串值更改时更新组件数据的简单修复。