Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js Nuxt/Vue-为什么在执行RouteEnter之前加载页面?_Vue.js_Nuxt.js - Fatal编程技术网

Vue.js Nuxt/Vue-为什么在执行RouteEnter之前加载页面?

Vue.js Nuxt/Vue-为什么在执行RouteEnter之前加载页面?,vue.js,nuxt.js,Vue.js,Nuxt.js,我对Nuxt非常陌生,我正在开发一个在后端使用Django的SSR应用程序 我正在尝试创建登录页面,在呈现它之前,我想检查用户是否已经登录,以及是否将用户重定向到另一个页面 由于各种原因,我无法从Nuxt中间件执行此操作,因为我需要从客户端而不是从服务器端执行此代码,所以我决定在路由之前使用。我的代码似乎可以工作,但问题是它会加载页面,然后在大约1-2秒后重定向到另一个页面。这有点难看,因为我不希望用户在被重定向之前看到登录页面。 我在创建之前用尝试了同样的方法,但结果是一样的 为什么会这样?是

我对Nuxt非常陌生,我正在开发一个在后端使用Django的SSR应用程序

我正在尝试创建登录页面,在呈现它之前,我想检查用户是否已经登录,以及是否将用户重定向到另一个页面

由于各种原因,我无法从Nuxt中间件执行此操作,因为我需要从客户端而不是从服务器端执行此代码,所以我决定在路由之前使用
。我的代码似乎可以工作,但问题是它会加载页面,然后在大约1-2秒后重定向到另一个页面。这有点难看,因为我不希望用户在被重定向之前看到登录页面。
我在创建之前用
尝试了同样的方法,但结果是一样的

为什么会这样?是因为页面被缓存了吗?我能修一下吗

代码如下:

导出默认值{
名称:“登录页面”,
道具:{
},
数据(){
返回{
}
},
路由前(到、从、下一个){
返回轴({
方法:“post”,
网址:'http://127.0.0.1:8000/checkAuth',
数据:{
},
事实上,
标题:{}
}).然后(功能(响应){
如果(响应['data']['state']=='True'){
//用户已登录,重定向
下一个(“/”)
}否则{
//用户未登录,不重定向
下一个()
}
}).catch(函数(错误){
下一个()
});
}
...
}

试着用这种形式写出来

路由之前(到、从、下一个){ 下一步(异步(vm)=>{ 等待axios。。。 如果(…){ 下一个() }否则{ next(false)//如果需要阻止导航 } }) }
这样,它应该在解析导航之前等待结果



如果您只需要在
页面上进行此检查
,您还可以使用在导航到下一页之前获取数据(它将被阻止,直到解决为止)。注意tho,因为目标页面上的F5不会触发此挂钩。

非常感谢!我试过这个,但结果是一样的。异步数据也是如此。基本上,页面的HTML被加载,一秒钟后,所有Nuxt内容都被激活。如果您
async/await
您的axios调用,它将在解析导航之前等待。您可以在
asyncData
钩子中设置4秒的
setTimeout
,以确保它等待API调用(只是为了确保您正确地插入了它!)。如果它没有等待
设置超时
,则某个地方存在问题。我的意思是,无论我尝试什么,在重定向之前,我都会看到登录页面1秒钟。我的意思是呈现页面中的HTML,然后执行Nuxt代码。我尝试过的所有方法都会出现这种情况,包括asyncData和其他方法。您的页面是初始页面还是导航到的页面(来自之前的页面,通过vue路由器)?然后,您需要
构建
目标
应该是
服务器
,如果我没记错的话)对于生产构建,它应该可以与基本的
纱线开发工具配合使用。尝试在客户端禁用JS,以仔细检查它是否实际上是仅SPA。可能有用: