У меня есть сложный объект для таблицы. Выглядит так:
{
1510002000: {
date: "07.11.17"
hours: {
1510002000:{
activity:{
activity: "Тест",
color: "#00ff00",
end_at: 1510005600,
start_at: 1510002000,
type_id: 1
}
},
1510005600: {
...
},
...
}
},
....
}
Это код из шаблона, который использует этот объект:
<tr v-for="date in this.tds">
<td>{{ date.date }}</td>
<td is="hour-td"
v-for="hour in date.hours"
:color="hour.activity.color"
:start_at="hour.activity.start_at"
:end_at="hour.activity.end_at"
:activity="hour.activity.activity"
:type_id="hour.activity.type_id"
>
</td>
</tr>
Я оценил его как вычисляемое свойство, но мне нужно повторно отобразить таблицу, когда родительский компонент предоставляет данные асинхронно, поэтому у меня есть наблюдатель за реквизитом (реквизит называется «действия»):
watch: {
activities: function(){
var vm = this;
let dth = new DateTimeHelper;
if (this.activities.length > 0){
this.activities.forEach(function(activity){
let dateTimestamp = dth.getDateTimestampFromTimestamp(activity.start_at); // just getting the key
if (vm.tds[dateTimestamp]){
if (vm.tds[dateTimestamp].hours[activity.start_at]){
vm.tds[dateTimestamp].hours[activity.start_at].activity.activity = activity.activity;
vm.tds[dateTimestamp].hours[activity.start_at].activity.color = activity.color;
vm.tds[dateTimestamp].hours[activity.start_at].activity.type_id = activity.type_id;
}
}
});
}
console.log(vm.tds) // here I can see that the object is filled with new data
}
},
Проблема в том, что таблица не перерисовывается. Точнее, компонент "hour-td" не содержит новых данных.
Также я пытался использовать Vue.set, но безуспешно
Не могли бы вы помочь мне с обновлением таблицы? ? Я потратил около 5 часов на рефакторинг и попытки.
Заранее спасибо
РЕШЕНИЕ
В моем случае может быть два состояния: есть действия, нет действий. Поэтому я сделал два вычисляемых реквизита для каждого случая, отрисовывал их отдельно и переключался на v-if="activities.length"
Date
изменение как обновление. Вычисляемые свойства кэшируются и будут обновляться только при обновлении их зависимостей, поэтому, вероятно, ваш компонентhour-td
не работает. Первое, что я бы попробовал, это создатьnew Date()
из метки времени, которая есть в вашем вычисляемом свойстве. - person Stephan-v   schedule 13.11.2017