Vue.js 使用vuex和vue路由器时未定义的数据

Vue.js 使用vuex和vue路由器时未定义的数据,vue.js,promise,undefined,vuex,vue-router,Vue.js,Promise,Undefined,Vuex,Vue Router,我的应用程序中数据的初始状态有问题。我使用的是vuex和vue路由器,我认为异步的东西让我感到困惑,但我不知道如何修复它 在my view.vue组件中: 路由之前(到、从、下一个){ store.dispatch('assignments/getAssignment'{ id:to.params.id })。然后(res=>next()); }, 在我的模块中: getAssignment({commit,state},{id}){ 返回axios.get('/assignments/'+i

我的应用程序中数据的初始状态有问题。我使用的是vuex和vue路由器,我认为异步的东西让我感到困惑,但我不知道如何修复它

在my view.vue组件中:

路由之前(到、从、下一个){ store.dispatch('assignments/getAssignment'{ id:to.params.id })。然后(res=>next()); }, 在我的模块中:

getAssignment({commit,state},{id}){
返回axios.get('/assignments/'+id)
。然后(响应=>{
如果(response.data.data.type=='goal\u plan'){
const normalizedEntity=normalize(response.data.data,赋值模式);
提交('goals/setGoals',{goals:normalizedEntity.entities.goals},{root:true});
提交('goals/setGoalStrategicPriorities',{goal\u priorities:normalizedEntity.entities.strategicPriorities},{root:true});
提交('goals/setObjectives',{objectives:normalizedEntity.entities.objectives},{root:true});
提交('goals/setStrategies',{strategies:normalizedEntity.entities.strategies},{root:true});
}
提交('setAssignment',{assignment:response.data.data});
}).catch(错误=>{
console.log(错误);
EventBus.$emit('error-shown',error);
});
},
下面是几个子组件,我想访问state.goals.goals,但它最初是未定义的。我可以处理其中一些问题,但不是全部

例如,我有一个子组件view.vue,其中包括

计算:{
原始算法(){
返回此.store.getters['goals/goalById'](this.goalId);
},
},
数据(){
返回{
表格:{
id:this.originalGoal.id,
description:this.originalGoal.description,
进度类型:此.originalGoal.progress\u类型,
进度值:{
到达:这个.originalGoal.progress\u values.to\u reach,
已实现:这是最初的进展,
},
到期时间:此刻(this.originalGoal.due\u at).toDate(),
状态:这个原始状态,
},
在我开始使用vuex之前令人兴奋的几天里,我将原始目标作为道具传递,所以这不是问题。因为它现在从状态中提取,我得到了一系列错误,它无法找到未定义的各种属性。最终原始算法在显示中解析,但它永远不会以这种方式显示在表单中

我试着“观察”电脑道具,但我从来没有看到它何时改变,我很确定这不是正确的方法


那么,是否有一种最初获取数据集的方法?如果没有,在设置数据后,我应该如何设置表单值?(欢迎任何其他建议,因为我对vuex和vue router非常陌生。)

因此,如果我在“已装入”中设置表单值我能够实现这一点。我想我还在学习vue的生命周期。:)

我认为这是因为您正在尝试获取原始数据()。为什么不直接访问表单中的计算值。例如,您似乎正在实现。不要这样做要在Phils的注释上展开,
axios.get
返回一个承诺,因此不需要将其包装在另一个承诺中。您可以执行
return axios.get()…
直接。谢谢!我已更新以删除显式承诺结构,只需返回axios.get()。谢谢您的建议!