javascript - Angularjs फ़िल्टर करने के लिए तर्क पास




angular-filters (4)

असल में एक और (शायद बेहतर समाधान) है जहां आप कोणीय के मूल 'फिल्टर' फ़िल्टर का उपयोग कर सकते हैं और अभी भी अपने कस्टम फ़िल्टर में तर्क पारित कर सकते हैं।

निम्नलिखित कोड पर विचार करें:

<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;
    }
}

जैसा कि आप यहां देख सकते हैं, हम वास्तव में एक और फ़ंक्शन लौटाते हैं जिसमें आपके पैरामीटर के साथ-साथ फ़िल्टर से आने वाली मूल वस्तु भी होती है।

मुझे यह महसूस करने में 2 दिन लग गए कि आप ऐसा कर सकते हैं, अभी तक इस समाधान को नहीं देखा है।

एक angular.js फ़िल्टर की चेकआउट रिवर्स polarity यह देखने के लिए कि आप इसे फ़िल्टर के साथ अन्य उपयोगी संचालन के लिए कैसे उपयोग कर सकते हैं।

क्या फ़िल्टर फ़ंक्शन पर एक तर्क पारित करना संभव है ताकि आप किसी भी नाम से फ़िल्टर कर सकें?

कुछ इस तरह

$scope.weDontLike = function(item, name) {
    console.log(arguments);
    return item.name != name;
};

आप कोणीय फ़िल्टर के लिए कई तर्क पारित कर सकते हैं!

मेरे कोणीय ऐप को परिभाषित करना और एक ऐप लेवल वैरिएबल -

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;
  }]);

और एचटीएमएल से आप डेटा भेज देंगे: -

<span ng-bind="'TEST' | testFilter: { 'be': val, 'se': value2 }"></span>

यहां मैं फ़िल्टर में एक JSON ऑब्जेक्ट भेज रहा हूं। आप स्ट्रिंग या नंबर जैसे किसी भी प्रकार का डेटा भी भेज सकते हैं।

आप फ़िल्टर करने के लिए तर्कों की गतिशील संख्या भी पारित कर सकते हैं, उस स्थिति में आपको उन तर्कों को प्राप्त करने के लिए तर्कों का उपयोग करना होगा।

एक कामकाजी डेमो के लिए यहां जाएं - कोणीय फ़िल्टर के लिए कई तर्क पारित करें


जो मैं समझता हूं उससे आप फ़िल्टर फ़ंक्शन पर तर्क नहीं दे सकते (जब 'फ़िल्टर' फ़िल्टर का उपयोग करते हैं)। आपको एक कस्टम फ़िल्टर लिखना होगा, इस तरह 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;
};

वास्तव में आप एक पैरामीटर ( http://docs.angularjs.org/api/ng.filter:filter ) पास कर सकते हैं और इसके लिए केवल एक कस्टम फ़ंक्शन की आवश्यकता नहीं है। यदि आप नीचे दिए गए एचटीएमएल को फिर से लिखते हैं तो यह काम करेगा:

<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>

http://jsfiddle.net/ZfGx4/59/





angular-filters