Я пытаюсь отключить данные, которые есть у меня в компоненте, на основе того, на что нажимали в списке вкладок в верхней части страницы моего компонента. Данные поступают из хранилища данных Vuex. После тестирования хранилища данных Vuex все работает нормально. В моем плагине Vue Chrome dev tools есть пустые данные в хранилище данных.
Когда я структурирую свой компонент, как показано ниже, и пытаюсь загрузить страницу, консоль жалуется 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>