क्या फ़िल्टर फ़ंक्शन में कोई तर्क पारित करना संभव है ताकि आप किसी भी नाम से फ़िल्टर कर सकें?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 यह देखने के लिए कि आप फ़िल्टर के साथ अन्य उपयोगी संचालन के लिए इसका उपयोग कैसे कर सकते हैं।
मैं क्या समझते हैं कि आप एक फिल्टर समारोह के लिए एक तर्क पारित नहीं हो सकता है (जब 'फिल्टर' फिल्टर का उपयोग कर) से। तुम क्या करने के लिए होगा एक कस्टम फ़िल्टर लिखना है, इस तरह sth:
.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;
};
Thats प्रीफेक्ट धन्यवाद! दायरे में नाम संग्रह करना इतना अच्छा काम नहीं करेगा क्योंकि मेरे पास एक ही पृष्ठ पर एक ही डेटा से तीन सूचियां हैं जो विभिन्न राज्यों (या नामों) के साथ फ़िल्टरिंग कर रही हैं। – shapeshifter
गतिशील रूप से 'एडम' (आपके जेएसएफडल का जिक्र करते हुए) सेट करने के लिए कोई भी? यह ngModel और कोणीय में एक कस्टम फ़िल्टर को गठबंधन करने के लिए असंभव प्रतीत होता है (और मुझे लगता है कि उद्देश्य पर है) ... – Rolf
क्या फ़िल्टर के पैरामीटर को पुन: व्यवस्थित करना संभव है? उदाहरण के लिए आइटम को फ़िल्टर के दूसरे पैरामीटर पर पास करें? – Pooya
वास्तव में आप एक पैरामीटर (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>
हां। साइड नोट - अगर किसी का नाम 'एडम' है, तो आप उसे {name: '!! Adam'} की तरह प्राप्त करते हैं। – honzajde
आप यहां भी इस तरह के 'फ़िल्टर: [' एडम ',' जॉन ']' – iConnor
jsfiddle लिंक टूटा हुआ है जैसे arrays भी पास कर सकते हैं। – Seregwethrin
pkozlowski.opensource's answer पर विस्तार और का उपयोग कर जावास्क्रिप्ट array's
builtin फिल्टर विधि एक prettified समाधान इस हो सकता है:
.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
इसे वास्तव में स्वीकार किया जाना चाहिए, यह ओपी के प्रश्न के लिए एक शर्त और कामकाजी समाधान है। अच्छा डेनिस! – ChrisR
यदि आपके फ़िल्टर को कई तर्कों की आवश्यकता है, तो देखें [मैं एकाधिक तर्कों के साथ एक Angular.js फ़िल्टर कैसे कॉल करूं?] (Http://stackoverflow.com/questions/16227325/how-do-i-call-an-angular- जेएस-फिल्टर-साथ-एकाधिक-तर्क) – nh2
सहमत हैं, यह चुना गया समाधान होना चाहिए। बहुत खूबसूरत! – JSancho