【问题标题】:vue-select allowing multiple duplicatesvue-select 允许多个重复项
【发布时间】:2019-12-19 08:52:47
【问题描述】:

我正在动态创建允许多选的 vue-select 下拉列表。但是这些下拉列表允许选择相同的选项。如何在不使用 v-model 的情况下更改此行为(因为我是动态创建这些列表)?

选项:

 "categories": [
    {
      "id": 1,
      "name": "Math",
      "years": [
        { "id": 14, "name": "4" },
        { "id": 15, "name": "5" },
        { "id": 16, "name": "6" }
      ]
    },
    {
      "id": 2,
      "name": "Science",
      "years": [
        { "id": 11, "name": "1" },
        { "id": 12, "name": "2" },
        { "id": 13, "name": "3" }
      ]
    }
  ]

HTML:

  <div
    v-for="category in categories">
    <label>{{category.name}}</label>
    <vue-select
      :options="category.years"
      label="name"
      @input="onCategoryYearSelect"
      multiple>
    </vue-select>
  </div>

【问题讨论】:

  • 你能更具体地描述你的问题吗?
  • 上面的代码可以运行,并且允许多选。但问题是它允许一遍又一遍地选择相同的选项。
  • 哦,我明白了。你能提供你的onCategoryYearSelect 方法吗?
  • 目前onCategroyYearSelect 方法没有任何作用。我只是用它来记录输入事件。
  • 您是否定义了属性,要将选定年份的类别存储在哪里?

标签: javascript vue.js vue-select


【解决方案1】:

首先,您应该定义数据属性,用于存储您选择的年份。

它将是一个对象,键是类别 ID,值是选定的年份。

然后你应该处理&lt;vue-select&gt;@input事件,将选定的年份设置为适当的类别。

Vue.component('vue-select', VueSelect.VueSelect)

new Vue({
  el: "#app",
  data() {
    return {
      "selectedYears": {},
      "categories": [{
          "id": 1,
          "name": "Math",
          "years": [{
              "id": 14,
              "name": "4"
            },
            {
              "id": 15,
              "name": "5"
            },
            {
              "id": 16,
              "name": "6"
            }
          ]
        },
        {
          "id": 2,
          "name": "Science",
          "years": [{
              "id": 11,
              "name": "1"
            },
            {
              "id": 12,
              "name": "2"
            },
            {
              "id": 13,
              "name": "3"
            }
          ]
        }
      ]
    }
  },
   methods: {
    inputHandler(id, e) {
      if (this.selectedYears[id] && this.selectedYears[id].find(item => item.id === e.id)) return;
      
      this.$set(this.selectedYears, id, e);
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://unpkg.com/vue-select@latest"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-select@latest/dist/vue-select.css">
<div id="app">
  <div>
    <div v-for="category in categories" :key="category.id">
      <label>{{ category.name }}</label>
      <vue-select :options="category.years" label="name" multiple @input="inputHandler(category.id, $event)">
      </vue-select>
    </div>
    <h1>{{ selectedYears }}</h1>
  </div>
</div>

【讨论】:

  • 我不知道为什么这对我不起作用,我仍然可以输入重复的选项。代码的哪一部分确保不允许重复?
  • 这是&lt;vue-select&gt;的图书馆职责范围。
  • 也就是说2可以选择多次?)
  • 更改值时您的类别会更新吗?我可以写检查,这样可以防止重复。
  • 是的,我选择1,然后选择2,然后我可以再次选择1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 2012-02-03
  • 2013-04-06
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多