我正在使用Vue.js 2.0和Element UI库。

我想使用多项选择将某些角色归因于我的用户。

收到所有可用角色的列表,并将其分配给availableRoles。由于它是对象的数组,并且v-model仅接受具有值的数组,因此我需要通过计算所得的属性id提取角色的computedRoles

接收到我用户的当前角色并将其分配给userRoles: [{'id':1, 'name':'Admin'}, {'id':3, 'name':'User'}]

然后computedRoles等于[1,3]

选择的预选很好,但是我什么也不能更改(从选择中添加或删除选项)

有什么问题以及如何解决?

http://jsfiddle.net/3ra1jscx/3/

<div id="app">
    <template>
      <el-select v-model="computedRoles" multiple placeholder="Select">
        <el-option v-for="item in availableRoles" :label="item.name" :value="item.id">
        </el-option>
      </el-select>
    </template>
</div>

var Main = {
    data() {
      return {
        availableRoles: [{
          id: 1,
          name: 'Admin'
        }, {
          id: 2,
          name: 'Power User'
        }, {
          id: 3,
          name: 'User'
        }],
        userRoles: [{'id':1, 'name':'Admin'}, {'id':3, 'name':'User'}]
      }
    },

    computed : {

        computedRoles () {
            return this.userRoles.map(role => role.id)
        }
    }
  }

最佳答案

我大部分都同意@wostex的答案,但是他没有给您userRoles属性。本质上,您应该交换computedRolesuserRolesuserRoles成为计算属性,而computedRoles是数据属性。在更新中,我将computedRoles的名称更改为selectedRoles

var Main = {
    data() {
      return {
        availableRoles: [{
          id: 1,
          name: 'Admin'
        }, {
          id: 2,
          name: 'Power User'
        }, {
          id: 3,
          name: 'User'
        }],
        selectedRoles:[1,2]
      }
    },
    computed : {
      userRoles(){
         return this.availableRoles.reduce((selected, role) => {
             if (this.selectedRoles.includes(role.id))
                    selected.push(role);
             return selected;
         }, [])
      }
    }
  }
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')


这是fiddle

09-11 19:05