2015-12-18 10 views
5

मैं निम्नलिखित सेटअपAngularJS काम नहीं कर फ़िल्टर करते हैं गुण अपरिभाषित है

$scope.array = 
    [ 
     {propertyA: "test", 
     propertyB: { 
        propertyC: [true, true, false] 
        } 
     }, 
     {propertyA: "test2"}, 
     {propertyA: "test3"} 
    ] 

और फिर

<div ng-repeat="item in array| filter :{propertyB: ''} :true"> 
    {{item.propertyA}} 
</div> 

तो समस्या है:

  1. इस सेटअप प्रदर्शित नहीं करता है कुछ भी

  2. अगर मैं |filter :{propertyB: '!!'} :true करने के लिए बदल अगर मैं |filter :{propertyB: undefined} :true करने के लिए बदल यह कुछ भी

  3. प्रदर्शित नहीं करता है यह सब कुछ को प्रदर्शित करता है

मैं यह पता लगा नहीं कर सकते।

लक्ष्य: मैं उन वस्तुओं को प्रदर्शित करना चाहता हूं जिनमें propertyB अपरिभाषित है और अन्य मामले में अन्य तरीकों से।

संपादित करें 1: jsfiddle UPDATED

संपादित करें 3:: यदि मैं angular.equals(item.propertyB, undefined) साथ सरणी पर पुनरावृति मैं false, true, true

संपादित 2 मिलता है मैं सवाल

+1

आपने जो jsfiddle जोड़ सकते हैं या –

+2

plunkr इस सवाल का जवाब यहां कर दिया गया है http://stackoverflow.com/questions/25177004/ng-repeat-filter-for-where-an-attribute-is-undefined –

+1

बस सच हटाएं और सबकुछ काम करता है! तथा !!। – Sim

उत्तर

0

मैं यह कर रहा अप endded।

.filter('undefinedProperties', ['$filter', function ($filter) { 
     var checkProperty = function (property, returnUndefined) { 
      if (returnUndefined) { 
       if (property !== undefined) { 
        return true; 
       } else { 
        return false; 
       } 
      } else { 
       if (property === undefined) { 
        return true; 
       } else { 
        return false; 
       } 
      } 
     }; 
     return function (input, propertyArray, returnUndefined) { 
      if (angular.isArray(propertyArray)) { 
       if (angular.isArray(input) && input.length > 0) { 
        angular.forEach(propertyArray, function (property) { 
         for (var i = input.length; i-- > 0;) { 
          if (checkProperty(input[i][property], returnUndefined)) { 
           input.splice(i, 1); 
          } 
         } 
        }); 
       } 
       return input; 
      } else { 
       throw "PropertyArray is not an array"; 
      } 
     }; 
    }]) 
1
$scope.array = 
[ 
    {propertyA: "test", propertyB: "test2"}, 
    {propertyA: "test2"}, 
    {propertyA: "test3"} 
]; 
$scope.filteredArray =[]; 
angular.forEach($scope.array,function(eachData){ 
    if(angular.isUndefined(eachData.propertyB)) 
    $scope.filteredArray.push(eachData); 
}); 

अद्यतन किया है और $scope.filteredArray सरणी है आप चाहते हैं और आप एचटीएमएल में बाध्यकारी के लिए इसे दोहराने में उपयोग कर सकते हैं।

+0

अद्यतन किया है कृपया अद्यतन प्रश्न की जांच करें। –

1

आप ng-repeat पर एक filter जोड़ रहे हैं ताकि आप एक ही सरणी तत्व के बजाय, फिल्टर करने के लिए इनपुट के रूप में एक collection मिल जाएगा, तो आपके कार्यान्वयन काम नहीं करेगा।

कुणाल के रूप में वर्णित है, हाथ से पहले सरणी को फ़िल्टर करने का प्रयास करें और फ़िल्टर किए गए सरणी पर दोहराएं। या डबल घुंघराले ब्रेसिज़ {{}} के अंदर एक फ़िल्टर जोड़ें।

जांच इस plnkr

+0

कृपया अद्यतन प्रश्न की जांच करें। इसके अलावा मैं उन्हें प्रस्तुत करने से पहले तत्वों को फ़िल्टर करना चाहता हूं (एनजी-दोहराना में) –

संबंधित मुद्दे