是否可以將參數傳遞給過濾器函數,以便可以按任何名稱進行過濾?將參數傳遞給angularjs過濾器
喜歡的東西
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
是否可以將參數傳遞給過濾器函數,以便可以按任何名稱進行過濾?將參數傳遞給angularjs過濾器
喜歡的東西
$scope.weDontLike = function(item, name) {
console.log(arguments);
return item.name != name;
};
其實還有另外一個(也許更好的解決方案),您可以使用角度的本地「過濾器」過濾器,並且仍然將參數傳遞給你的定製過濾器。
考慮下面的代碼:
<div ng-repeat="group in groups">
<li ng-repeat="friend in friends | filter:weDontLike(group.enemy.name)">
<span>{{friend.name}}</span>
<li>
</div>
爲了使這項工作,你只是定義過濾器,如下所示:
$scope.weDontLike = function(name) {
return function(friend) {
return friend.name != name;
}
}
正如你可以在這裏看到,weDontLike實際上返回它還有另外一個功能,您參數在其範圍內以及來自過濾器的原始項目。
我花了2天才意識到你可以做到這一點,還沒有看到任何地方的解決方案。
結帳Reverse polarity of an angular.js filter瞭解如何將其用於過濾器的其他有用操作。
從我的理解(使用「過濾器」過濾器時),你不能傳遞一個參數的過濾功能。你必須做的是寫一個自定義過濾器,某事像這樣:
.filter('weDontLike', function(){
return function(items, name){
var arrayToReturn = [];
for (var i=0; i<items.length; i++){
if (items[i].name != name) {
arrayToReturn.push(items[i]);
}
}
return arrayToReturn;
};
這裏是工作的jsfiddle:http://jsfiddle.net/pkozlowski_opensource/myr4a/1/
其他簡單的替代,而無需編寫自定義過濾器是一個名字存儲篩選出的範圍,然後寫:
$scope.weDontLike = function(item) {
return item.name != $scope.name;
};
這是完美的感謝!在範圍中存儲名稱將不會如我所見,在同一頁面上具有來自同一數據的三個列表,即使用不同的狀態(或名稱)進行過濾。 – shapeshifter 2012-08-01 07:03:36
任何設置'亞當'(指您的JSFiddle)動態?這似乎是不可能的(我想這是故意的)將ngModel和Angular中的自定義過濾器結合起來... – Rolf 2013-04-20 21:34:17
是否可以重新排序過濾器的參數?例如,將項目傳遞給過濾器的第二個參數? – Pooya 2014-12-24 13:11:41
其實你可以傳遞參數(http://docs.angularjs.org/api/ng.filter:filter),不需要只爲這一個自定義的功能。如果你重寫你的HTML如下它會工作:
<div ng:app>
<div ng-controller="HelloCntl">
<ul>
<li ng-repeat="friend in friends | filter:{name:'!Adam'}">
<span>{{friend.name}}</span>
<span>{{friend.phone}}</span>
</li>
</ul>
</div>
</div>
是的。附註 - 如果某人的名字是'!Adam',你可以像{name:'!! Adam'}那樣得到他。 – honzajde 2013-03-10 00:21:52
你也可以在這裏傳遞數組,像這樣'filter:['Adam','john']' – iConnor 2013-08-11 23:12:07
jsfiddle鏈接被破壞。 – Seregwethrin 2014-01-27 13:35:28
擴展上pkozlowski.opensource's answer和使用javascript array's
內置過濾方法的美化解決方案是這樣的:
.filter('weDontLike', function(){
return function(items, name){
return items.filter(function(item) {
return item.name != name;
});
};
});
這裏的的jsfiddle link。
更多關於陣列過濾器here。
你可以簡單地做這樣的 模板
<span ng-cloak>{{amount |firstFiler:'firstArgument':'secondArgument' }}</span>
在過濾器
angular.module("app")
.filter("firstFiler",function(){
console.log("filter loads");
return function(items, firstArgument,secondArgument){
console.log("item is ",items); // it is value upon which you have to filter
console.log("firstArgument is ",firstArgument);
console.log("secondArgument ",secondArgument);
return "hello";
}
});
可以多個參數傳遞到角過濾!
定義我的角度應用程序,以及一個應用程序級的變量 -
var app = angular.module('filterApp',[]);
app.value('test_obj', {'TEST' : 'test be check se'});
你的過濾器將是這樣的: -
app.filter('testFilter', [ 'test_obj', function(test_obj) {
function test_filter_function(key, dynamic_data) {
if(dynamic_data){
var temp = test_obj[key];
for(var property in dynamic_data){
temp = temp.replace(property, dynamic_data[property]);
}
return temp;
}
else{
return test_obj[key] || key;
}
}
test_filter_function.$stateful = true;
return test_filter_function;
}]);
而且從HTML,你會發送類似的數據: -
<span ng-bind="'TEST' | testFilter: { 'be': val, 'se': value2 }"></span>
在這裏,我發送一個JSON對象到過濾器。 您也可以發送任何類型的數據,如字符串或數字。
,你也可以通過動態數量的參數中,你必須使用參數得到這些參數的話來過濾, 。
對於工作演示去這裏 - passing multiple arguments to angular filter
這實際上應該被接受,這是OP的問題的一個解決方案。尼斯一個不錯的人! – ChrisR 2013-11-28 13:42:51
如果您的過濾器需要多個參數,請參見[如何使用多個參數調用Angular.js過濾器?](http://stackoverflow.com/questions/16227325/how-do-i-call-an-angular- js-filter-with-multiple-arguments) – nh2 2014-02-27 15:24:24
同意,這應該是選擇的解決方案。十分優雅! – JSancho 2014-10-17 12:20:13