How to watch on Route changes with Nuxt and asyncData

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-31 03:58:06

问题


Hi everybody i'm trying to watch on route changes in my nuxt js app.

Here my middleware:

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

index.vue File

  middleware: [routeReact]

i'm trying to write this:

app.context.route = route

but it says to me that app.context doesn't exist

Here's the point of my question i'm trying to update my data that gets from my api with axios on page if route changing like this

this the page

i'm clicking link to next page :

but when i'm route to next page, nothing happens all data is the same:

here my asyncData code:

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
    };
  })

}

Thanks for your help


回答1:


First thing, context.route or it's alias this.$route is immutable object and should not be assigned a value.

Instead, we should use this.$router and it's methods for programmatic navigation or <nuxt-link> and <router-link>.

As I understand, you need to render the same route, but trigger asyncData hook in order to update component's data. Only route query is changed.

Correct way to navigate to the same page but with different data is to use link of such format:

<nuxt-link :to="{ name: 'index', query: { start: 420 }}"

Then you can use nuxt provided option watchQuery on page component and access that query inside asyncData as follows:

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
      }
    })
},

This option does not require usage of middleware. If you want to stick to using middleware functions, you can add a key to layout or page view that is used. Here is an example of adding a key to default layout:

<nuxt :key="$route.fullPath" />

This will force nuxt to re-render the page, thus calling middlewares and hooks. It is also useful for triggering transitions when switching dynamic routes of the same page component.



来源:https://stackoverflow.com/questions/52874435/how-to-watch-on-route-changes-with-nuxt-and-asyncdata

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!