假設我有5000個對象(具有布爾值),我必須ng-repeat
在模板的陣列:自定義過濾器VS在控制器的性能比較濾波函數
$scope.arr = [
{
"value": true
},
{
"value": false
},
{
"value": false
}
//and so on
]
現在,我要過濾此ng-repeated
陣列在一個動態變量的基礎上,說'show_filter',我正在其他地方設置。
如果'show_filter'設置爲'all',我想顯示所有的對象。如果它設置爲false(布爾值),那麼我想顯示'value'鍵設置爲false的對象。當'show_filter'設置爲true時也是如此。
所以,一般有兩種做法:
1.創建一個自定義過濾器:
我會寫的過濾任務,像這樣的自定義過濾器:
過濾器:
app.filter('filterArr', function() {
return function(arr, show_filter) {
var filtered_arr = [];
if(show_filter != 'All') { //if show_filter is a boolean value
for(var i = 0; i < arr.length; i++) {
if(arr[i].value == show_filter) {
filtered_arr.push(arr[i]);
}
}
return filtered_arr;
}
else {
return arr; //return the entire array if show_filter is set to 'All'
}
}
})
模板:
obj in arr | filterArr : show_filter
2.寫在控制器中的濾波函數:
濾波器:
$scope.filterObjects = function(arr) {
var filtered_arr = [];
if($scope.show_filter != 'All') { //if $scope.show_filter is a boolean value
for(var i = 0; i < arr.length; i++) {
if(arr[i].value == $scope.show_filter) {
filtered_arr.push(arr[i]);
}
}
return filtered_arr;
}
else {
return arr; //return the entire array if show_filter is set to 'All'
}
}
模板:
obj in filterObjects(arr)
以上哪兩種方法會更快?我已經看到每個digest循環每次都執行自定義過濾器代碼,而不僅僅是對$scope.show_filter
所做的更改,這使我相信其效率非常低。雖然我不確定兩種方式之間哪個更快。
你有兩個相同的功能,你問什麼是最快的?如果你的意思是所謂的最少次數,那麼你可能已經回答了你自己的問題了? – davidkonrad
我不知道第二個函數調用了多少次。 –
最快的選擇是將過濾的數組展示給'ngRepeat'。必須在每個摘要循環中調用第二個函數。 – zeroflagL