VueJS中的多个多选值作为一个对象?

Posted

技术标签:

【中文标题】VueJS中的多个多选值作为一个对象?【英文标题】:Multiple Multi Select Values as One Object in VueJS? 【发布时间】:2018-08-11 19:35:00 【问题描述】:

我正在尝试将多个多选的值保存为一个对象...

这就是我想要做的。我有 3 个选择框,并且正在使用 ChosenJS 库来获得更好的用户界面。

所有 3 个多选都使用相同的模型(应该更改吗?)

HTML

<div id="app">
    <select multiple v-chosen v-model="choices" name="filters1" id="filters1">
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
        <option value="3">Option 3</option>
    </select>

    <select multiple v-chosen v-model="choices" name="filters2" id="filters2">
        <option value="4">Option 4</option>
        <option value="5">Option 5</option>
        <option value="6">Option 6</option>
    </select>

    <select multiple v-chosen v-model="choices" name="filters3" id="filters3">
        <option value="7">Option 7</option>
        <option value="8">Option 8</option>
        <option value="9">Option 9</option>
    </select>
    <pre>
        Selected Options: choices
    </pre>
</div>

JS

Vue.directive('chosen', 
    twoWay: true,
    bind: function () 
        return this.vm.$nextTick((function (_this) 
            return function () 
                return $(_this.el).chosen(
                    inherit_select_classes: false,
                    width: '100%'
                ).change(function (ev) 
                    var i, len, option, ref, values;
                    if (_this.el.hasAttribute('multiple')) 
                        values = [];
                        ref = _this.el.selectedOptions;
                        for (i = 0, len = ref.length; i < len; i++) 
                            option = ref[i];
                            values.push(option.value);
                        
                        console.log(values);

                        return _this.set(values);
                     else 
                        return _this.set(_this.el.value);
                    
                );
            ;
        )(this));
    ,
    update: function (nv, ov) 
        return $(this.el).trigger('chosen:updated');
    
);

var app = new Vue(
    el:'#app',
    data: 
        choices: []
    
)

我的预期结果是:

选择的选项:['2','3','6','8']

这可能吗? 我创建了一个小提琴来显示我在哪里。

http://jsfiddle.net/tyLa562h/3/

【问题讨论】:

【参考方案1】:

不,你不能。只有单选按钮和复选框可以具有相同的模型。所以,在这里你可以通过使用computed 选项来做到这一点:(choice1、choice2、choice3 都是三个不同的model

computed: 
  allChoices: function() 
    return this.choice1 + this.choice2 + this.choice3; // return how you want
  
 

如果你愿意,你甚至可以使用getter/setter 方法。

【讨论】:

以上是关于VueJS中的多个多选值作为一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得一个未展平的多选值数组和单个输入?

MVC 5下拉列表用于编辑视图中的多选值绑定

在 sql 语句中引用 ListBox 多选值

使用 AngularJS 将所​​选值绑定到多选 ListboxFor 控件

antd+vue3 多选框的值为对象数组

多选元素 - onchange