簡體   English   中英

angularJs從數組中排除已選擇的項目

[英]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對所選鏈接進行分組會更有效,以避免在陣列中進行搜索,並在控制器中進行過濾。

我想讓它更通用一點,所以我做了以下幾點

http://jsfiddle.net/96m4sfu8/

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM