javascript - 多选Vue.js和计算属性

标签 javascript vuejs2

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

我想使用多重选择将某些角色分配给我的用户。

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

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

compatedRoles 则等于 [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属性。本质上,您应该交换compulatedRolesuserRolesuserRoles 成为计算属性,compulatedRoles 成为数据属性。在我的更新中,我将 compulatedRoles 的名称更改为 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 .

关于javascript - 多选Vue.js和计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241149/

相关文章:

javascript - 使用 javascript(或 jQuery)选择和操作 CSS 伪元素,例如::before 和::after

javascript - 代码点火器 : Passing ajax based data

javascript - 如何将 Google Visualization 放入 <div> 并使用 jQuery 使其可拖动

javascript - 在 vuejs 中使用全局函数。 Lint (?)

javascript - View | vue-moment.js 的问题

javascript - 为什么我的作用域插槽不显示任何内容?

javascript - 如何使用 ajax 和 json 将图像呈现为下拉列表?

javascript - 在选项卡上的内容可编辑 div 内获取 focus()

javascript - 在 Vue Router 中添加 Global Route Guards 后,URL 将不再更新

javascript - Vue Full Calendar (next, prev) 按钮触发