Vue 无法更改嵌套 v-for 中的属性

Posted

技术标签:

【中文标题】Vue 无法更改嵌套 v-for 中的属性【英文标题】:Vue cannot change attribute in nested v-for 【发布时间】:2021-03-23 02:12:00 【问题描述】:

我得到一个对象数组,并在其中添加属性clicked=false,这样我以后可以使用 vue bind 和该属性的值添加或删除一个类

然后我将这个对象数组转换为对象结构,这样我就可以在循环的渲染中按类型渲染项目。

我在每个列表项上使用点击方法来更改clicked 属性,但它永远不会改变。

我该怎么做?

对象有这个结构

grouped:
  typeA: [
   
    clicked: false,
    text: "a1",
    type: "typeA"
   , 
   
    clicked: false,
    text: "a2",
    type: "typeA"
   
  ],
  typeB: [
   
    clicked: false,
    text: "b1",
    type: "typeB"
   
  ]

然后按我做的类型渲染

  <div v-for="(group, type) in grouped" :key="type">
    <b>type</b>
    <div  v-for="(item, index) in group" :key="index" @click="eventItemClick(item)" >
      item.text   item.clicked
    </div>
  </div> 

eventItemClick 方法所做的只是

      eventItemClick(item)    
        item.clicked = !item.clicked;
      ,
           

我创建了一个简单的js fiddle example 来演示。只需记住单击group 按钮即可对数组进行分组并呈现列表

谢谢

【问题讨论】:

【参考方案1】:

您遇到了reactivity caveat,因为您尝试使用渲染时不存在的数据属性。

设置这些属性时使用Vue.set

this.todos.forEach(e =>  
   this.$set(e, 'clicked', false);  // `Vue.set` in a module
);

【讨论】:

您好,感谢您的回答。我得到ReferenceError: Vue is not defined 我在这里错过了什么?谢谢 嗨,Vue 应该在你的小提琴中定义,因为你使用new Vue。但我编辑给你看set的组件语法 感谢您的修复。我现在没有错误,但仍然无法正常工作。也许我应该在 eventItemClick 中使用某种 get ?谢谢 这是你的小提琴与我的答案集成:jsfiddle.net/sh0ber/6nq73w51(请注意它适用于此编辑和原始版本)所以我不确定你指的是什么

以上是关于Vue 无法更改嵌套 v-for 中的属性的主要内容,如果未能解决你的问题,请参考以下文章

@click 事件不会更改 Vue.js 中的数据属性

v-for json 中的切片对象 - Vue 警告:TypeError:无法读取未定义的属性“切片”

Vue 应用程序中的嵌套 v-for 使用之前的状态

无法将 Vue 变量传递给视图中的隐藏输入 v-model(v-for)

Vue.js - 如何按特定属性对数组中的对象进行排序并使用“v-for”进行渲染

vue组件5 组件和v-for指令