【问题标题】:unique data v-model vue唯一数据 v-model vue
【发布时间】:2018-04-14 16:33:27
【问题描述】:

在我的模板中选择字段:

li(v-for="user in users", :id="'user_' + user.id")
  .user-management(@click="toggleShowUser(user)", :id="'user' + user.id")
    select(v-model="selected" :options="options")

在我的 vue 组件中:

export default {
  data() {
    return {
      options: [
        {
         value: 'option1',
         label: 'Option 1',
         iconLeft: 'user'
        },
      ],
      selected: ['option1']
    },
    toggleShowUser(user) {
      this.$set(this.selected, 0, "5ad0ac33a8abbc3fe4ce2863")
    }
  }
}

问题是this.selected值设置在模板中的所有用户选择字段中。

我想在具有特定 ID 的特定用户选择字段中设置此值。

谢谢!

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-component


    【解决方案1】:

    您可以将索引传递给切换功能:

    li(v-for="user in users", :id="'user_' + user.id")
      .user-management(@click="toggleShowUser(user))", :id="'user' + user.id")
        select(v-model="selected.includes(user.id)" :options="options")
    

    并更新功能代码:

    export default {
      data() {
        return {
          options: [],
          selected: [],
        },
        toggleShowUser(user) {
          if (this.selected.includes(user.id)) {
            // remove
            this.selected = this.selected.filter(id => id !== user.id);
          } else {
            // insert
            this.selected.push(user.id);
          }
        }
      }
    }
    

    【讨论】:

    • 谢谢,我得到:[Vue warn]: Property or method "index" is not defined on the instance but referenced during render. Make sure that this property is reactiveconsole.log(index)undefined
    • 你添加到v-for了吗? v-for="(user, index) in users"
    • 谢谢,是的,我确实添加了它。问题是我需要selected 就像一个数组而不是一个对象:(.
    • 当然,将其声明为数组,工作方式相同。我已经更新了答案。
    • 抱歉,我的意思是,我需要v-model="selected"。我用一个例子编辑了我的问题:)。谢谢!
    【解决方案2】:

    我建议为每次迭代创建一个新属性,以便找到选定的值。您可以尝试 2 个可能的选项 -

    li(v-for="user in users", :id="'user_' + user.id")
      .user-management(@click="toggleShowUser(user)", :id="'user' + user.id")
        select(v-model="selected[user.id]" :options="options")
    
        export default {
          data() {
            return {
              options: [],
              selected: []
            },
            toggleShowUser(user) {
              this.$set(this.selected[user.id], "5ad0ac33a8abbc3fe4ce2863")
            }
          }
        }
    

    li(v-for="user in users", :id="'user_' + user.id")
      .user-management(@click="toggleShowUser(user)", :id="'user' + user.id")
        select(v-model="user.selected" :options="options")
    
    
    export default {
      data() {
        return {
          options: [],
        },
        toggleShowUser(user) {
          this.$set(user.selected, "5ad0ac33a8abbc3fe4ce2863")
        }
      }
    }
    

    【讨论】:

    • 谢谢,组件字段怎么样?
    • 对不起,我无法理解组件字段是什么意思!
    • 是的,我的意思是在 options: []selected: {} 字段和 toggleShowUser 方法中。谢谢!
    猜你喜欢
    • 2018-11-02
    • 2023-02-03
    • 2019-09-20
    • 2016-11-12
    • 2019-05-22
    • 2023-03-17
    • 1970-01-01
    • 2022-01-08
    • 2019-12-20
    相关资源
    最近更新 更多