【发布时间】:2019-09-26 16:11:01
【问题描述】:
我需要使用通过 api 调用 (axios) 获得的对象数组来填充表。 这部分工作正常。 在商店模块(activity.js)中,我声明了数组:
currentUserActivities: [],
在突变中:
SET_CURRENT_USER_ACTIVITIES: (state, currentUserActivities) => {
state.currentUserActivities = currentUserActivities
},
在行动中:
setCurrentUserActivities({ commit }, userId) {
return new Promise((resolve, reject) => {
getUserActivities(userId).then(response => {
const currentUserActivities = response.results
commit('SET_CURRENT_USER_ACTIVITIES', currentUserActivities)
console.log('response current user activities: ', response.results)
resolve()
}).catch(error => {
console.log('Error setting single user activities: ', error)
reject(error)
})
})
},
然后我将它保存在 getters 模块中:
currentUserActivities: state => state.activity.currentUserActivities,
在vue页面中,脚本的相关部分:
data() {
return {
currentUser: {},
userId: {
type: Number,
default: function() {
return {}
}
},
currentUserActivities: [],
}
},
mounted() {
const userId = this.$route.params.userId
this.$store.dispatch('user/setCurrentProfile', userId).then(() => {
const currentUser = this.$store.getters.currentProfile.user
this.currentUser = currentUser
console.log('user mounted user', currentUser)
this.$store.dispatch('activity/setCurrentUserActivities', userId).then(() => {
const currentUserActivities = this.$store.getters.currentUserActivities
console.log('activities on mounted', currentUserActivities)
})
})
},
在模板部分,正如我所说,我将有一个表格数据。让我们暂时忘记它,我只是想让数组显示为原始数据,如下所示:
<div>
<p v-if="currentUserActivities.length = 0">
This user has no activities yet.
</p>
<p>CURRENT ACTIVITIES: {{ currentUserActivities }}</p>
<p>CURRENT USER: {{ currentUser }}</p>
</div>
当前用户显示正常,在浏览器中我可以看到:
CURRENT USER: { "id": 1, "last_login": "20/09/2019 09:42:15", "is_superuser": false, "username": "admin", "first_name": "System", "last_name": "Dev", "email": "systems@dev.it", "is_staff": true, "is_active": false, "date_joined": "30/08/2019 09:03:40" }
当前用户活动数组,而不是:
CURRENT ACTIVITIES: []
在控制台中我都有,留下用户很好,当前用户活动数组是:
activities on mounted:
0: {...}
1: {…}
2:
activity: (...)
arrival_point: "SRID=4326;POINT (0 0)"
burns_calories: false
co2: "0.00"
co2_production: (...)
cost: (...)
created: (...)
default_cost: (...)
end: (...)
ecc。它在那里,我们可以看到它。
mounted里面,如果我们比较为user和activity写的代码,唯一的区别就是我没有设置
this.currentUserActivities = currentUserActivities
如果我这样做,我也会丢失控制台中的数据(在屏幕上它仍然是空数组)。 在控制台中我会:
activities on mounted: (5) [{…}, {…}, {…}, {…}, {…}, __ob__: Observer]
1. length: 0
2. __ob__: Observer {value: Array(0), dep: Dep, vmCount: 0}
3. __proto__: Array
还有,即使我设置了
v-if="currentUserActivities.length = 0"
如果数组真的为空,则显示一个 p 标签,它不会被显示。这也是不对的。不知道有没有关系。
我尝试了许多微妙的不同版本的代码,但都没有奏效。
我知道我遗漏了一些东西(代码永远不会出错......)......
有人能告诉我吗?
非常感谢。 x
【问题讨论】: