使用 Select2(多项选择)和 vue.js

Using Select2 (multiple selections) with vue.js

我是 vue 的新手,在 http://vuejs.org/examples/select2.html 关注了他们的 'custom directive'。

这在只选择一个项目时效果很好,但当你选择多个项目时它只会通过第一个。我需要它来传递所有选定的值。

我设置了一个 jsfiddle 来显示此处提供的代码。 https://jsfiddle.net/f3kd6f14/1/

指令如下;

 Vue.directive('select', {
    twoWay: true,
    priority: 1000,

    params: ['options'],

    bind: function() {
        var self = this
        $(this.el)
                .select2({
                    data: this.params.options
                })
                .on('change', function() {
                    self.set(this.value)
                })
    },
    update: function(value) {
        $(this.el).val(value).trigger('change')
    },
    unbind: function() {
        $(this.el).off().select2('destroy')
    }

如有任何帮助,我们将不胜感激。

当 Select2 处于多值模式时,

this.value 无法像您预期的那样工作(更多信息请参见:Get Selected value from Multi-Value Select Boxes by jquery-select2?)。

试试这个(在这里 fiddle 工作:https://jsfiddle.net/02rafh8p/):

Vue.directive('select', {
    twoWay: true,
    priority: 1000,

    params: ['options'],

    bind: function() {
        var self = this
        $(this.el)
                .select2({
                    data: this.params.options
                })
                .on('change', function() {
                    self.set($(self.el).val()) // Don't use this.value
                })
    },
    update: function(value) {
        $(this.el).val(value).trigger('change')
    },
    unbind: function() {
        $(this.el).off().select2('destroy')
    }
})

var vm = new Vue({
    el: '#el',
    data: {
        selected: [], // Result is an array of values.

        roles : [
            { id: 1, text: 'hello' },
            { id: 2, text: 'what' }
        ]
    }
})

在 Vue 2 中,获取所有 select2 值 onchange:

改变这个:

.on('change', function () {
  self.$emit('input', this.value); // Don't use this.value
});

为此:

.on('change', function () {
  self.$emit('input', $(this).val());
});