【问题标题】:remove option from second select if already selected [Ordered multiple selection]如果已选择,则从第二个选择中删除选项 [有序多项选择]
【发布时间】:2017-11-24 09:26:04
【问题描述】:

我有选择选项中继器。

我想要的是,当我在第一个选项中选择 johndoe 时,它​​将不再显示在第二个选择选项中。

这是我的html

<div id="app">
  <h1>Vue JS Multiple Fields Repeater</h1>
          <div class="col-sm-6">
            <div class="panel panel-default relative has-absolute" v-for="(field, index) in users.usersRepeater">
              <button @click="addUsersField" type="button">
                Add
              </button>
              <button @click="deleteUsersField(index)" v-if="field != 0" type="button">
                Delete
              </button>
              <div class="panel-body has-absolute">
                <div class="form-group">
                  <label for="users" class="control-label col-sm-3 text-left">Users {{field}}</label>
                    <select :name="'users'+index"
                      class="form-control"
                      id="users">
                        <option value="" hidden>Select User</option>
                        <option value="1">John Doe</option>
                        <option value="2">Mark Doe</option>
                        <option value="3">Mae Doe</option>
                        <option value="4">John Smith</option>
                        <option value="5">Mae Smith</option>
                    </select>
                </div>
              </div>
            </div>
          </div>
</div>

这是我的 vue.js

new Vue({
  el: '#app',
  data: {
    users: {
          usersRepeater: [{ user: '' }]
        }
  },
  methods: {
      addUsersField: function() {
        this.users.usersRepeater.push({
          user: ''
        });
      },
      deleteUsersField: function(index) {
        this.users.usersRepeater.splice(index, 1);
      },
  }
});

这是小提琴 -> https://jsfiddle.net/0e3csn5y/23/

【问题讨论】:

  • 你不应该在你的 html 中硬编码用户列表
  • 也许这会有所帮助jsfiddle.net/943bx5px/2 我可以做到但我现在没有时间
  • 我已经更新了小提琴 -> jsfiddle.net/0e3csn5y/23
  • 创建另一个列表以保留选定的用户,或者更好地将另一个属性添加到 isSelected 到您的用户列表中...
  • 这个npm package 可能对你有用。看起来它完全符合您的要求。

标签: vue.js


【解决方案1】:

Ok I have this working now. 我喜欢这个问题,因为进行有序选择是一种通用情况。但是,无论如何,对我来说,这并不简单。突破是意识到,当您对选项进行编号时,组件的整个状态可以封装在一个数组中,allUsers。然后,可用的用户和选项将成为基于此数组的计算属性。故事的寓意:让您的商店正确,商店的元素之间没有互动。

我的答案有 130 行。如果没有 Vue,这将有多长时间和多难?令人难以置信。

Stack 想让我发布一些代码,所以这里是计算属性,它生成一个从所有用户数组中按优先级排列的选择数组...

choices(){
    return this.store.allUsers.map((aUser,index)=>{
    if(aUser.selection != null)
        return {idxAllUsers : index, selection: aUser.selection};
    else
        return null;
  })
  .filter(aSelection=>aSelection != null)
  .sort((a,b)=>{return a.selection - b.selection})
  .map(a=>a.idxAllUsers);
},

【讨论】:

  • 我无法添加新的选择选项
  • 对小提琴的一些更新。 selectedUsers 数组正在更新,但尚未正确显示。怪物问题。
  • 暂时没用
  • @JSmith 你有没有进行过这个?根据我的说法,My jsfiddle 解决方案仍然运行良好。
【解决方案2】:

我发现this one 很有帮助。

【讨论】:

猜你喜欢
  • 2015-10-09
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多