Vuejs2 创建的vuejs组件等待先加载数据
我有一个Vuejs2 创建的vuejs组件等待先加载数据,vuejs2,vue-router,Vuejs2,Vue Router,我有一个App.vue组件,我想在其中加载当前登录的用户。我还希望在用户尝试进入登录路径并且当前登录的用户已保存在上下文中(他已登录)时重定向该用户 我在登录组件的created方法中检查了当前用户是否已设置,但是当用户尝试转到登录页面时,可能当前用户的请求未完成 我的问题是: 在加载App.vue组件之前,如何等待数据加载? 我看到了这样的情况: waitForData: true, data(transition) { return AuthService.getCurrentUser(
App.vue
组件,我想在其中加载当前登录的用户。我还希望在用户尝试进入登录路径并且当前登录的用户已保存在上下文中(他已登录)时重定向该用户
我在登录组件的created
方法中检查了当前用户是否已设置,但是当用户尝试转到登录页面时,可能当前用户的请求未完成
我的问题是:
在加载App.vue组件之前,如何等待数据加载?
我看到了这样的情况:
waitForData: true,
data(transition) {
return AuthService.getCurrentUser().then(currentUser => {
transition.next({ currentUser });
});
}
created() {
AuthService.getCurrentUser()
.then(user => this.setCurrentUser(user))
.then(() => {
const { path } = this.$router.currentRoute;
if (path === '/login') {
this.$router.push('/');
}
});
它实际上并不等待加载数据和组件
编辑:我知道
beforeRouteEnter
但这是App.vue
组件,它是所有组件的父组件,而不是路由特定组件。如果使用vue路由器
,您可以使用beforeRouteEnter
保护异步加载数据,如本文所述:我可以想到的一种方法是,当用户被租借到App.vue
组件中时,检查当前路径,如果它是\login
则重定向
大概是这样的:
waitForData: true,
data(transition) {
return AuthService.getCurrentUser().then(currentUser => {
transition.next({ currentUser });
});
}
created() {
AuthService.getCurrentUser()
.then(user => this.setCurrentUser(user))
.then(() => {
const { path } = this.$router.currentRoute;
if (path === '/login') {
this.$router.push('/');
}
});
我遇到了一个非常类似的问题,通过在包装依赖于加载数据的子组件的元素上添加v-if解决了这个问题。然后当然有一个数据属性来控制v-if。如果没有包装元素,您可以始终使用元素进行包装。这不是Vue的做法
您也可以在相关组件中使用v-if,以便在VUEX中准备好数据之前不会创建该组件。是的,但这是
App.vue
组件,因为它没有连接到任何路由,所以它不起作用,或者至少我不能让它工作。@Nikola可能会使用类似于isFetched
state的东西,并在获取状态后使用v-if进行渲染?如果子组件也需要获取依赖于父组件数据的数据呢?