angularjs如何通过多选删除重复项
angularjs how to remove duplicates by multiple select
向angular js提出的一个问题。假设我有一个对象数组,例如:
items = [
{"id":1,"name":"AAA"},
{"id":2,"name":"BBB"},
{"id":3,"name":"CCC"},
{"id":4,"name":"DDD"}
]
现在我的视图中有2到3个选择。
<select type="text" class="form-control form-control-small"
ng-model="itemId" ng-options="item.id as item.name for item in items">
</select>
<select type="text" class="form-control form-control-small"
ng-model="itemId" ng-options="item.id as item.name for item in items">
</select>
<select type="text" class="form-control form-control-small"
ng-model="itemId" ng-options="item.id as item.name for item in items">
</select>
那么,我如何确保我在第一次选择中有所有4个选项,在第二次选择中的3个选项(均为负选择),在第三次选择中为两个选项(也均为负选中),依此类推。以及如何在任何选择发生更改时更新后续选择。
非常感谢您的想法。
您需要创建一个过滤器
注意:我使用的是ES5过滤器功能,它在IE8上不起作用,除非你使用垫片
yourModule.filter('exclude', function () {
return function (items, exclude) {
return items.filter(function (item) {
return exclude.indexOf(item.id) === -1;
});
});
});
在你的标记
<select type="text" class="form-control form-control-small"
ng-model="itemId1" ng-options="item.id as item.name for item in items">
</select>
<select type="text" class="form-control form-control-small"
ng-model="itemId2" ng-options="item.id as item.name for item in items | exclude:[itemId1]">
</select>
<select type="text" class="form-control form-control-small"
ng-model="itemId3" ng-options="item.id as item.name for item in items | exclude:[itemId1, itemId2]">
</select>
如果要在第一个或第二个发生更改时更新选择,请使用ngChange
指令重置或更改其他模型值。
Module.filter('exclude', function () {
return function (items, exclude) {
return items.filter(function (item) {
return exclude.indexOf(item.id) === -1; // Checking if the itemid is present already in the array
});
}
});
在你的标记
<select type="text" class="form-control form-control-small"
ng-model="itemIdA" ng-options="item.id as item.name for item in items">
</select>
<select type="text" class="form-control form-control-small"
ng-model="itemIdB" ng-options="item.id as item.name for item in items | exclude:[itemIdA]">
</select>
<select type="text" class="form-control form-control-small"
ng-model="itemIdC" ng-options="item.id as item.name for item in items | exclude:[itemIdA, itemIdB]">
</select>
我实际上找到了一个更好的(imho)solation。我们只是在数组中添加一个布尔字段,比如:
{"id":1,"name":"AAA", "show" : true}
和过滤到ng选项:
ng-options="item as item.name for item in items | filter : {"show : true}"
当从列表中选择一个项目时,我们需要更新以将值"显示"为false,这样它在下一次选择时就不可见,并在必要时再次更新为true。无论如何,有很多需要你的帮助:)
相关文章:
- 如何通过AngularJS删除一个项目
- 通过选中和取消选中复选框来添加和删除数组中的值
- 通过点击文本区域添加和删除多个标签
- 通过ajax调用删除表中的tr
- 如何通过迭代对象数组来删除某些项目
- 通过删除其相关的 DOM 存在来重新初始化 jQuery 插件
- 通过找到一种删除许多 if 语句的方法来简化代码
- 更改现有的css属性,并通过删除或添加css元素来使用它
- 通过regex删除部分url
- 通过javascript从浏览器历史记录中删除URL
- JS和ExpressionEngine-仅通过重复值删除KV对
- 如何使用fine Uploader通过删除选项将上传的文件名传递到服务器端
- Knockoutjs通过选中复选框来删除多个
- 如何通过引用(javascript)从数组中删除对象
- 可以't通过Express路由从Mongodb中删除文档
- 需要删除订单通过过滤 ng 根据条件重复
- 新的iOS和Safari在滚动时删除了通过jQuery中的脚本添加的类
- 删除“disabled"通过JS,但按钮仍然禁用
- 文件删除未通过客户参数
- JavaScript 表行 - 删除,通过数组排序,放回正确的位置