【发布时间】:2020-06-22 18:17:48
【问题描述】:
我正在尝试根据在组件页面顶部的选项卡列表中单击的内容来切换组件中的数据。数据来自 Vuex 数据存储。通过测试 Vuex 数据存储,一切似乎都运行良好。我的数据存储中有虚拟数据,在我的 Vue Chrome 开发工具插件中似乎没问题。
当我在下面构建我的组件并尝试加载页面时,控制台正在抱怨Cannot read property 'amount' of undefined。我假设这是因为数据是在计算属性进入 Vue 之前加载的。
我觉得我想多了,但我的目标是在单击我的一个选项卡时切换显示的数据。我可以为每个标签创建一个组件,然后收工,但我觉得这会非常重复。
我的尝试
-尝试将数据的currentObj: this.obj1 替换为currentObj: {}。同样的错误。
-尝试将currentObj 数据属性移动到计算属性。当我这样做时,页面会加载,但我仍然收到相同的错误,当我单击选项卡时,我的数据没有更新。
知道如何在我的组件中切换出currentObj 中的数据吗?
<template>
<div>
<ul class="tabs">
<li class="tab-title" v-on:click="tabSelection = 'tab1'">Tab 1</li>
<li class="tab-title" v-on:click="tabSelection = 'tab2'">Tab 2</li>
<li class="tab-title" v-on:click="tabSelection = 'tab3'">Tab 3</li>
</ul>
<div>{{ currentObj.amount }}</div>
</div>
<template>
<script>
export default {
data: function() {
return {
tabSelection: 'tab1',
currentObj: this.obj1
}
},
watch: {
tabSelection: function(oldTabSelection, newTabSelection) {
switch (newTabSelection) {
case 'tab1':
this.currentObj = this.obj1;
break;
case 'tab2':
this.currentObj = this.obj2;
break;
case 'tab3':
this.currentObj = this.obj3;
break;
}
}
},
computed: {
obj1: function() {
return this.$store.getters.obj1;
},
obj2: function() {
return this.$store.getters.obj2;
},
obj3: function() {
return this.$store.getters.obj3;
}
}
}
</script>
【问题讨论】:
标签: javascript vue.js components vuex watch