我将Nuxt与Vue路由器和Axios一起使用。我看到Vue路由器有一个叫做导航卫士的神奇功能。
不幸的是,在下面的示例中,调用了mybeforeRouteEnter()
函数,但似乎在fetchPageData(next)
中调用手动next()
方法之前退出并切换页面。
这里正确的模式是什么?
export default {
beforeRouteEnter (to, from, next) {
next(vm => {
vm.fetchPageData(next);
});
},
methods: {
async fetchPageData(next) {
const result = await this.$axios.$get('/api/v2/inventory/3906?apiKey=f54761e0-673e-4baf-86c1-0b85a6c8c118');
this.$store.commit('property/setProperty', result[0]);
next();
}
}
}
我假设我对next(vm)的第一次调用=
这里发生的情况是,您已经在调用next
,这就是路线立即进入的原因。
你接下来打电话去哪里?
beforeRouteEnter (to, from, next) {
next(vm => { // <= HERE you execute next
vm.fetchPageData(next);
});
},
上面的代码将执行vm。已渲染组件时获取页面数据
。
因此,即使您没有在fetchPageData
上调用next
,路由也会进入。
假设您想在BE获取某些数据后进入视图,您可以在路由器配置上使用beForeEnter
:
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
axios.get('api/...')
.then(response => {
store.commit('mutation', response)
next()
})
.catch(e => {
alert('Something went wrong')
next(false)
})
}
}
]
})
另一种解决方案是允许路由进入,但在获取数据时显示加载程序:签出此答案
你说得对,第二次调用next()
是不正确的。您对next()
的第一次调用告诉路由器“继续,您可以继续更改活动组件(创建/装载/渲染),当创建组件时,调用我的回调(作为参数传递给next()
)
首先获取数据,然后调用Next()
,但这需要从组件本身提取提取逻辑。
一般来说,我发现以这样的方式编写所有组件更容易:假设数据在第一次渲染时不在这里,并且在所有异步调用解决后会出现。。。
UPDATE Nuxt异步数据获取选项
当您使用Nuxt时。js您还可以选择如何使用异步数据:
asyncData
方法,只是它不设置组件数据,并允许您将数据放入存储区。返回Promise从getch
方法将使Nuxt等待promise解决之前,它呈现组件... data
中。从asyncData
方法返回Promise将使Nuxt在呈现组件之前等待解决的promise...export default {
async fetch({store, $axios}) {
const result = await $axios.$get('/api/v2/inventory/3906');
store.commit('property/setProperty', result[0]);
}
}
我是新的vue-router导航后卫,所以我最近意识到我需要使用后卫的重用组件,例如:从到 然而,在进入时,我通过axios调用从数据库中提取数据,在进入之前,我需要通过axios调用再次提取新数据。 这就是我面临的问题,其中导航后卫加载组件之前,我的数据加载从axios调用,因此我得到null在我的几个变量。 如何让等待加载下一个组件,以便从axios调用加载所有数据? 至于我的代码,它看起来是
我试图从这个链接使用Angular Universal用SSR呈现Angular 7应用程序https://angular.io/guide/universal.我认为我已经从那里开始工作了,因为我能够查看页面源代码,并查看应用程序中的所有内容。呈现到页面的组件。但是,我无法呈现标记内的任何路由 我只是简单地剥离了我的应用程序,完全按照留档所说的去做。我在那里读到一些关于确保在app.server
我正在使用react、Redux和react Router开发一个react web应用程序,带有服务器端呈现(使用express) 我面临的问题有点难以解释。我将试着在下面的步骤中进行解释。 > 您首先从http://www.example.com/articles/1234这样的URL进入应用程序。express服务器将发送正确的内容,其中包括正确的页面源和DOM(来自chrome Eleme
我意识到以前有人问过我这个问题,请容忍我,因为我还在学习这个问题。我想我已经尝试了所有的解决方案,但是没有运气。 问题是:当重定向到时,它没有呈现预期的组件() 我已经实现了一个,如下所示; privaterout.js 这就是我使用它的地方; index.js 在这个问题中要补充几点: 我确认重定向确实发生在(我通过将
我有一个路由器像下面: 以下是我想要实现的目标: 如果未登录,将用户重定向到 如果用户在登录后试图访问,请将其重定向到root 因此,现在我尝试在