vue.js - Vuejs beforeRouteEnter 没有收到数据。不明确的
问题描述
我想在渲染组件之前在 vuejs 中获取数据。所以这是我没有使用 beforeRouteEnter 获取数据的问题。
这是一个工作示例created
:
created() {
this.$store.dispatch('getInvite');
this.$store.dispatch('getInviteUser');
},
computed: mapState([
'user',
'invite',
'invite_user'
]),
有了这个 beforeRouteEnter 我得到了localhost:8080/invitation/undefined
beforeRouteEnter(to, from, next) {
store.dispatch('getInvite');
next();
},
这是功能actions.js
const getInvite = ({
commit
}) => {
API.get('/invitation/' + router.currentRoute.params.slug + '/' + router.currentRoute.params.id)
.then((response) => {
if (response.status === 200 && response.data.invite && response.data.user) {
return commit('SET_INVITE', response.data.invite);
} else {
return router.push({
name: 'home'
});
}
}).catch((error) => {
return console.log(error);
});
};
解决方案
根据文档:
beforeRouteEnter 守卫无权访问此内容,因为在导航确认之前调用守卫,因此甚至还没有创建新的进入组件。
所以router
仍然是未定义的,因为它是实例的插件:
相反,您可以使用 afterEach
创建实例并导航新路线的位置:
在您的router
文件上:
router.afterEach((to,from)=>{
if (to == 'component') {
store.dispatch('getInvite')
}
})
// you don't have to use the if in case you want an API call after every navigation
注意:由于不是“组件内保护”,如果您将最后一个存储在其自己的文件夹中,则afterEach
需要将存储导入文件router.js
推荐阅读
- c - 用结构和txt文件在C中读取函数
- google-cloud-platform - 如何在 Google Cloud Composer 中创建有效的 JDBC 连接?
- c# - c#使用visual studio 2015发送邮件
- codeigniter - phpspreadsheet 在本地工作但不在现场工作
- php - 云端多台服务器上的 Gearman
- c++ - 迭代包含在结构中的向量
- javascript - 需要从 http uri 方案启动 Electron App
- rxjs - 如何通过 catchError() 正确传播错误?
- android - 使用 Proguard 时 Firebase 身份验证不起作用
- java - 自定义类上的 readEntity 抛出 MessageBodyProviderNotFoundException