基于对象属性对数组元素的反应

Posted

技术标签:

【中文标题】基于对象属性对数组元素的反应【英文标题】:Reactivity to an array element based on object property 【发布时间】:2021-11-24 10:00:29 【问题描述】:

我正在以摘要形式获取学生详细信息,只有姓名和姓氏。我将响应传递给数据中的数组:data: function() return studsSummary:[] 。我在 v-for 中使用这个螺柱数组来动态创建学生,如下所示:<div>studSummary.name</div>

在选择学生时,我会在摘要区域下方以详细形式加载学生详细信息。详细的细节在数据中有一个带有相应字段的对象。让我们只为我的问题说名字和姓氏。所以在数据中我也有studDetailed : name: '', surname: ''。此外,这些现在通过v-model='studDetailed.name' 绑定到文本字段。现在由于 studsSummary[0].name = studDetailed.name 我希望前者对后者做出反应,并且当我在文本字段中键入时,任何更改也会反映在摘要中。

我需要做些什么改变才能完成这项工作?然后我尝试this.$set(this.studsSummary[0], 'name', this.studDetailed.name) 将两者绑定(这最终是我想要的),但这没有用。

【问题讨论】:

【参考方案1】:

如果我理解正确,请尝试如下 sn-p: (在@input 事件上更新studsSummary

new Vue(
  el: '#demo',
  data() 
    return  
      studsSummary: [id: 1, name: 'aaa', surname: 'AAA', id:2, name: 'bbb', surname: 'BBB', id:3, name: 'ccc', surname: 'CCC'],
      studDetailed: id: null, name: '', surname: ''
    
  ,
  methods:
    selectStud(stud) 
      this.studDetailed = stud
    ,
    setStud() 
      this.studsSummary = this.studsSummary.map((item) =>
        item.id !== this.studDetailed.id
          ? item
          :  ...item, ...this.studDetailed 
      )
    
  
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <ul>
    <li v-for="(studSummary, i) in studsSummary" :key="i">
      <div @click="selectStud(studSummary)">studSummary.name - studSummary.surname</div>
    </li>
  </ul>
  <div v-if="studDetailed.id">
    <input type="text" v-model="studDetailed.name" @input="setStud" />
    <input type="text" v-model="studDetailed.surname" @input="setStud" />
  </div>
</div>

【讨论】:

以上是关于基于对象属性对数组元素的反应的主要内容,如果未能解决你的问题,请参考以下文章

数组中对象的属性在所有元素都更改时是反应性的,但如果只有一些元素更改则不是

VueJs 组件的 Prop 相关计算属性对对象数组 Prop 更改没有反应

我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?

JS对象数组多条件排序

基于对象属性对数组进行排序 - Javascript [重复]

JS中for...in 语句用于对数组或者对象的属性进行循环操作吗?