【问题标题】:How to update value from v-for="(value,key) in obj" in vue-js如何从 vue-js 中的 v-for="(value,key) in obj" 更新值
【发布时间】:2021-07-10 18:22:40
【问题描述】:

我有带有键值对的对象,我正在使用 for 循环。

     <CCol
            sm="6"
            v-for="(
              my_value, my_key
            ) in my_obj"
            :key="my_key"
          >
            <CInput
              :label="my_key"
              type="text"
              :placeholder="my_value" // I can use my_value as the placeholder
              :v-model="my_value" // but if I use my_value in v-model it gives an error
            />
          </CCol>

我正在尝试将键显示为标签,将值显示为文本框的值,用户可以更新该值。

当我在 v-model 中使用 value 时,它​​会给出错误“v-model”指令无法更新迭代变量“my_value”本身。”但我只能像占位符一样将它用于显示目的。

我需要可更新的值。

欢迎提出任何建议。提前致谢。

【问题讨论】:

    标签: vue.js vuejs3


    【解决方案1】:

    尝试添加索引,然后您可以使用键来引用相应的值:

      <CCol
                sm="6"
                v-for="(
                  my_value, my_key,index
                ) in my_obj"
                :key="my_key"
              >
                <CInput
                  :label="my_key"
                  type="text"
                  :placeholder="my_value" 
                  v-model="my_obj[my_key]" 
                />
              </CCol>
    

    当你迭代一个像这样的对象时:

    user:{
      first_name:'John',
      last_name:'Doe'
      age:25
    }
    

    语法v-for="(val,index) in user" 会给你每个值和它的索引,但是当你这样做时v-for="(val,key,index) in user" 这会给你值,它的键和索引。

    正确的绑定是v-model="object[key]",它可以代表user.age,错误的绑定是使用v-model="val"和val,在这种情况下,仅在25或Doe这样的模板中不可用作为属性存在于脚本中

    【讨论】:

    • 我认为添加index 是多余的。澄清一下迭代,如果循环中的虚拟变量 (my_value) 是标量,则将其绑定为 v-model 没有意义,因为修改标量只会修改传递的值(类似于修改标量函数参数,调用者永远不会看到它)。
    猜你喜欢
    • 2016-09-27
    • 2018-12-03
    • 2021-02-16
    • 2017-10-20
    • 2021-08-05
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多