如何使用Nuxt和asyncData监视路由更改

Alb*_*kyi 4 vue.js vue-router nuxt.js

大家好,我想在我的nuxt js应用程序中观察路线变化。

这是我的中间件:

    export default function ({ route }) {
  return route; but i don't know what to write here
}
Run Code Online (Sandbox Code Playgroud)

index.vue文件

  middleware: [routeReact]
Run Code Online (Sandbox Code Playgroud)

我试图写这个:

app.context.route = route
Run Code Online (Sandbox Code Playgroud)

但它告诉我app.context不存在

这是我的问题的重点,如果这样更改路线,我将尝试使用页面上的axios更新从我的api获取的数据

这页 在此处输入图片说明

我点击链接到下一页:

在此处输入图片说明

但是当我转到下一页时,所有数据都是一样的:

在此处输入图片说明

这是我的asyncData代码:

asyncData({ app }) {
return app.$axios.$get('apps/' + app.context.route.fullPath.replace(/\/categories\/?/, ''))
.then(res => {
  return {
    info: res.results,
    nextPage: res.next,
    prevPage: res.prev
    };
  })
Run Code Online (Sandbox Code Playgroud)

}

谢谢你的帮助

aBi*_*uit 8

第一件事,context.route或者它的别名this.$route是不可变的对象,不应为其分配值。

相反,我们应该使用this.$router和它的方法进行程序化导航<nuxt-link><router-link>

据我了解,您需要渲染相同的路线,但是要触发asyncData钩子才能更新组件的数据。仅更改路由查询。

导航到同一页面但使用不同数据的正确方法是使用以下格式的链接:

<nuxt-link :to="{ name: 'index', query: { start: 420 }}"
Run Code Online (Sandbox Code Playgroud)

然后,您可以在页面组件上使用nuxt提供的选项watchQueryasyncData并按如下方式访问该查询:

watchQuery: true,

asyncData ({ query, app }) {
  const { start } = query
  const queryString = start ? `?start=${start}` : ''
  return app.$axios.$get(`apps/${queryString}`)
    .then(res => {
      return {
        info: res.results,
        nextPage: res.next,
        prevPage: res.prev
      }
    })
},
Run Code Online (Sandbox Code Playgroud)

此选项不需要使用middleware。如果您想坚持使用中间件功能,则可以在使用key的布局或页面视图中添加一个。这是key向默认布局添加一个示例:

<nuxt :key="$route.fullPath" />
Run Code Online (Sandbox Code Playgroud)

这将迫使nuxt重新渲染页面,从而调用中间件和挂钩。当切换同一页面组件的动态路由时,它对于触发转换也很有用。