[英]angularJs exclude already selected items from array
我在$ scope.currentSChannels.scgsLink中有一個對象數組。這個對象數組有類似的東西
$ scope.currentSChannels.scgsLink = [{channelId:1,sCgsLinkId:1,groupNo:1,percentage:50,expireHrs:4},{channelId:1,sCgsLinkId:2,groupNo:2,percentage:50,expireHrs:1 }]
我還有以下選擇列表
<div class="col-md-4"> <select class="form-control" ng-model="newLink.groupNo" name="groupNo" id="groupNo" ng-options="t.value as t.text for t in metaData.spGroups"></select> </div>
我需要過濾該列表,以便不在$ scope.currentSChannels.scgsLink groupNo列中顯示已選擇的項目。 我查看了http://christian.fei.ninja/Angular-Filter-already-selected-items-from-ng-options/以及AngularJS ng-options以排除特定對象 ,兩者似乎都很接近但不夠我需要過濾該數組中的數組和特定列。 我該如何實現過濾?
模板變得有點棘手。 假設selectedLink
是指向所選groupNo
的變量
ng-options="t.value as t.text for t in metaData.spGroups | filter: {value: '!' + currentSChannels.scgsLink[selectedLink].groupNo}"
看到這個小提琴 :第二個選擇包含與第一個相同的集合, 排除已經選擇的內容。
編輯 :上面的解決方案是根據一個值排除元素。 為了根據值集合排除元素,自定義過濾器最適合:
過濾
app.filter('channelFilter', function () {
return function (metadata, exclusions) {
var filterFunction = function (metadata) {
// return the metadata object if exclusions array does NOT contain his groupNo
return !exclusions.some(function (exclusion) {
return exclusion.groupNo === metadata.value;
});
};
return metadatas.filter(filterFunction);
};
});
用法
ng-options="metadata in metadatas | channelFilter: exclusions"
模板
ng-options="t.value as t.text for t in metaData.spGroups | channelFilter: currentSChannels.scgsLink"
也就是說,通過groupNo
對所選鏈接進行分組會更有效,以避免在陣列中進行搜索,並在控制器中進行過濾。
我想讓它更通用一點,所以我做了以下幾點
app.filter('excludeFrom', function () { return function (inputArray, excludeArray, excludeColumnName, inputColumnName) { if (inputColumnName==undefined) inputColumnName = 'value'; var filterFunction = function (inputItem) { return !excludeArray.some(function (excludeItem) { return excludeItem[excludeColumnName] === inputItem[inputColumnName]; }); }; return inputArray.filter(filterFunction); }; });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.