javascript - Vuejs2:使用对象作为 Prop 时如何判断 Prop 更新?

标签 javascript vue.js vuejs2

假设我有一个数组 feedsArray,示例值可能如下所示:

this.feedsArray = [
  {
    id: 1,
    type: 'Comment',
    value: 'How are you today ?'
  },
  {
    id: 2,
    type: 'Meet',
    name: 'Daily sync up'
  }
]

假设我注册了两个组件:CommentMeet,每个组件都有一个prop设置如下:

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
  }
},

但是这里不行。任何人都知道如何解决这个问题?

最佳答案

不要使用索引直接赋值给数组 - 使用 splice() 代替,否则 JavaScript 无法检测到您已经更改了数组。

如果您只想更改对象的现有键的值 - 那么只需更新它,例如this.feeds[0].value = '我不再好了';

这仅适用于现有 key - 否则您必须使用 this.$set(this.feeds[0], 'value', 'I am not okay any more');

关于javascript - Vuejs2:使用对象作为 Prop 时如何判断 Prop 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51277932/

相关文章:

javascript - 多个同时发生的事件javascript

php - 谷歌地图标记 : Need option for 'Get Directions'

vue.js - 如何在Vue中使用 Elasticsearch ?如何在 Elasticsearch 中存储一些数据?

javascript - 在 v-model 中使用条件运算符?

javascript - 无法让 setter/getter 工作

javascript - 我正在尝试使用 Ajax 将数据发送到另一个页面

vue.js - Nuxt head() 不等待 head 的 asyncData 响应

laravel - 使用 VueJS、axios 和 Laravel 上传文件

vue.js - VueJS v-model 与 v-for

javascript - 子组件发送给父组件,父组件更新所有子组件