0

Çok basit bir görev olmalı. Belirli bir parametrenin açısal temelli açılır menüsünü sıralamak istiyorum. Kolay olmalı.AngularJS değişkenine göre filtrelenme listesi

iadesinin bazı veriler şöyle bir DataService çağrısı yapmak:

"success" : true, 
    "data" : { 
     "this_status" : [{ 
       "DefNo" : "111*A", 
       "Com" : "111", 
}, { 
       "DefNo" : "222*B", 
       "Com" : "222", 
}, { 
       "DefNo" : "333*C", 
       "Com" : "333", 
} 
]; 
     "this_info" : [{ 
       "Req" : "MUST", 
       "DefCom" : "111", 
}, { 
       "Req" : "NoMUST", 
       "DefCom" : "222" 
}, { 
       "Req" : "MUST", 
       "DefCom" : "333" 
}]} 

Benim görevim de ilişkili bir zorunluluk değere sahip tüm Defcom değerlere sahip bir liste yapmaktır. Bir açılır listenin içinde "ZORUNLU" olan "Req" olan "DefCom" sayılarını listelemem gerekiyor.

angular.module('MyAPI.services', []) 
    .factory('MyAPIservice', function($http) { 
    var MyAPI = {}; 
    MyAPI.getDefCom = function() { 
     return $http({ 
      method: 'GET', 
      url: '/thisis/mylink/' 
     }); 
    }; 

    return invoiceheaderAPI; 
}); 

bu benim için çalışır: my örnekte, benim açılır Degerler 111 ve benim denetleyicisi olarak

333. olurdu Yani, görüşme bu fabrika var

$scope.getDefCom = function(){ 
     MyAPIservice.getDefCom().success(function(response){ 
      $scope.info = response.data.this_info; 
      $scope.infoList = $scope.info; 
     }); 
     } 

yürütmek İlk girişim, DefCom numaralarını listeleyecek bir açılır yapın. Ancak, daha sonra onları filtrelemeliyim. Bu örnekte

$scope.require = MUST.

<option ng-repeat="option in DefComList" value="{{option.DefCom}}">{{option.DefCom}} </option> 

ben şöyle bir filtre yapıyor çalıştı: şablonumun İçinde

Sana içine $ kapsamı değişkeni ekleyebilirsiniz şey bulamadı Ancak daha okunmasının ardından

ng-repeat="option in DefComList | filter: {Req: $scope.require}" 

filtre. Önerilerin çoğu kendi filtrenizi yazmaya yöneldi. Bunu angular.forEach kullanarak yaptım. Benim filtresi aşağıdaki gibidir:

$scope.filterDefs = function($scope) { 
     var clrreturn = false; 
     angular.forEach($scope.info, function(value, key) { 
      if (value.DefCom == $scope.require) 
       clrreturn = true; 

     }); 
     return clrreturn; 
    }; 

Ancak, benim özel filtre $ sonuçlarını almadan önce çalıştığı $ scope.getDefCom işlevinden scope.info. $ Scope.info hazır olmadan önce Error: undefined is not an object (evaluating '$scope.info') atıyor. Bunun sözlerle ilgisi olduğunu biliyorum, bu yüzden ertelenmiş sözlerle yazmayı denedim. Ancak, bu da işe yaramadı ve ben sinirli oldum çünkü bu çok basit bir görev olmalı ve kendim için olması gerekenden çok daha zor olabilir.

cevap

2

Düşündüğünüzü düşünüyorum; Ne yapmak istediğinizi anlamak ediyorum, o zaman filtrenizde gerektiğinde tüm şudur:

ng-repeat="option in DefComList | filter: require : true" 

Not 'ZORUNLULUK' için aramasıyla tam eşleşme için geçerlidir da 'noMUST' eşleşir. https://jsfiddle.net/nqya24r4/

Ayrıca

özel olarak sadece Req özelliğini aramak isterseniz, bir dize yerine bir nesne kullanarak filtreleyebilirsiniz: Burada

senin için bir araya koymak hızlı bir keman olduğunu. İşte bunu gösteren başka bir keman: https://jsfiddle.net/t3bw5L5d/2/

Umarım bu yardımcı olur.

+0

Teşekkür ederiz! Bu mükemmel çalışıyor. Kesinlikle gözden geçiriyordum, bu özel bir filtre yazmaktan daha kolay. – jenryb

+0

Sorun değil, yardımcı olmaktan mutluluk duyuyoruz! – anierzad

+0

'ng-options' ile bunu aynı şekilde yapabilirsiniz [jsfiddle] (https://jsfiddle.net/awolf2904/0e5wfes3/). – AWolf