我正在使用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
属性。本质上,您应该交换computedRoles
和userRoles
。 userRoles
成为计算属性,而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。