使用Select2 Multiple - 使用vueJS2

时间:2016-12-20 13:34:19

标签: javascript select2 vue.js

有没有什么好方法可以使用Select2插件选择带VuesJS2的多个字段

我发现了这个

https://vuejs.org/v2/examples/select2.html

但这只是单一选择,但我不知道如何将它带到多选并输出所选项目的数组。

Vue.component('select2', {
  props: ['options', 'value'],
  template: '#select2-template',
  mounted: function () {
    var vm = this
    $(this.$el)
      .val(this.value)
      // init select2
      .select2({ data: this.options })
      // emit event on change.
      .on('change', function () {
        //vm.$emit('input', this.value)
        //vm.$emit('input', this.value)
        vm.$emit('input', this.value)
      })
  },
  watch: {
    value: function (value) {
      // update value
      $(this.$el).select2('val', value)
    },
    options: function (options) {
      // update options
      $(this.$el).select2({ data: options })
    }
  },
  destroyed: function () {
    $(this.$el).off().select2('destroy')
  }
})

var vm = new Vue({
  el: '#el',
  template: '#demo-template',
  data: {
    selected: [],
    options: [
      { id: 1, text: 'Hello' },
      { id: 2, text: 'World' }
    ]
  }
})
html, body {
  font: 13px/18px sans-serif;
}
select {
  min-width: 300px;
}
<!DOCTYPE html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://unpkg.com/select2@4.0.3/dist/css/select2.min.css">
<script src="https://unpkg.com/select2@4.0.3"></script>
<script src="https://unpkg.com/vue@2.1.6/dist/vue.js"></script>

<div id="el"></div>

<!-- using string template here to work around HTML <option> placement restriction -->
<script type="text/x-template" id="demo-template">
  <div>
    <p>Selected: {{ selected }}</p>
    <select2 :options="options" v-model="selected">
      <option disabled value="0">Select one</option>
    </select2>
  </div>
</script>

<script type="text/x-template" id="select2-template">
  <select>
    <slot></slot>
  </select>
</script>

1 个答案:

答案 0 :(得分:1)

我今天偶然发现了这个问题,我只是想发布答案,以防其他人想知道同样的问题。

从select2发出时,你必须使用正确的方法从select2中选出结果。

替换

vm.$emit('input', this.value)

vm.$emit('input',  $(this).val())

这确保我们使用jquThis将使用包含所有选定selected的数组填充v模型(在您的示例中为id)。