Предположим, что у меня есть массив feedsArray
, значение примера может выглядеть так:
this.feedsArray = [
{
id: 1,
type: 'Comment',
value: 'How are you today ?'
},
{
id: 2,
type: 'Meet',
name: 'Daily sync up'
}
]
Предположим, что я зарегистрировал два компонента: Comment
и Meet
, Каждый компонент имеет настройку прокрутки следующим образом:
props: {
feed: Object
}
и основной компонент имеет следующее определение:
<component v-for="feed in feedsArray" :feed="feed" :key="feed.id" :is="feed.type"></component>
Как вы можете видеть, он использует is
свойство для выбора другого компонента. Мой вопрос в том, как определить изменение объекта подачи в дочернем компоненте? Например, когда я устанавливаю
this.feedsArray[0] = {
id: 1,
type: 'Comment',
value: 'I am not ok'
}
Как компонент Comment
может обнаружить изменения? Я попытался добавить определение наблюдателя в дочерний компонент следующим образом:
watch: {
feed: {
handler (val) {
console.log('this feed is changed')
},
deep: true
}
},
Но здесь это не работает. Кто-нибудь знает, как это решить?
Не назначайте непосредственно массиву, используя index - use splice()
, иначе JavaScript не сможет обнаружить, что вы изменили массив.
Если вы хотите изменить только значение уже существующего ключа объекта - тогда просто обновите его, например this.feeds[0].value = 'I am not okay any more';
Это работает только для существующих ключей - иначе вы должны использовать this.$set(this.feeds[0], 'value', 'I am not okay any more');
id
(и который вы используете в:key="feed.id"
), я чувствую, что реактивность Vue не сработает, поскольку она не будет повторно визуализировать компонентыv-for