nuxt watchQuery 无法使用新查询处理更新路由

Posted

技术标签:

【中文标题】nuxt watchQuery 无法使用新查询处理更新路由【英文标题】:nuxt watchQuery not working on update route with new query 【发布时间】:2021-01-27 05:30:47 【问题描述】:

当我使用 $router.push 添加一个新查询来路由 Nuxt watchQuery 不工作并且 asyncData 不获取 api 并重新挂载子组件时。请注意“新查询”,默认情况下不存在任何查询。(创建新查询然后存在查询后,一切都正确,watchQuery 工作正常。)

example.com/some-param ----> example.com/some-param?brand=x(不工作 watchQuery)

example.com/some-param?brand=x ----> example.com/some-param(正确的 watchQuery)

change_brand: function () 
  const vm = this;
  /*** selected_brands = [] is an array defined in data ***/
  let q =  ...vm.$route.query ;
  if (vm.selected_brands.length > 0) 
    q.brands = vm.selected_brands.join("-");
   else 
    delete q.brands;
  
  vm.$router.push(
    name: "search-slug",
    params: vm.$route.params,
    query: q,
  );
,

【问题讨论】:

你检查过这个nuxtjs.org/api/pages-watchquery!! 是的。我知道这一点,我的问题是为什么它对向路由添加新查询没有反应。如果查询存在,一切都是正确的。(我不确定,但我认为这是 nuxt 的一个大错误) 问题通过使用 $router.push(path: $route.path, query: q) 而不是 $router.push( name: "search-slug", params: vm. $route.params, 查询:q, ); 【参考方案1】:

正如 Nuxt 文档所说here:

警告:2.12 中引入的新 fetch 挂钩不受 watchQuery 影响。有关详细信息,请参阅侦听查询字符串更改。

我使用下面的 watcher 让 fetch hook 监听路由查询的变化:

export default 
  watch: 
    '$route.query': '$fetch'
  ,
  async fetch() 
    // Called also on query changes
  

参考:https://nuxtjs.org/docs/2.x/features/data-fetching#listening-to-query-string-changes

【讨论】:

以上是关于nuxt watchQuery 无法使用新查询处理更新路由的主要内容,如果未能解决你的问题,请参考以下文章

将 fetchPolicy 设置为“standby”时无法调用 client.watchQuery - 从 useLazyQuery 加载页面时引发错误

Nuxt(Vue) 使用 $apollo.query 处理 Apollo 错误

将 Apollo 客户端用于 GraphQl 时如何在 watchQuery 中使用 loading 属性

使用 nuxt-apollo 时如何使用 GraphQL 查询?

Angular Apollo GraphQL watchQuery 与订阅

如何使用 Nuxt ServerMiddleware 和 Apollo GraphQL 处理 301 重定向