2014-12-22 16 views
46

Nesnelerin özellik değerleri olarak karmaşık bir nesneyi varsa, iç içe geçmiş özelliklerden biri tarafından nasıl filtreleyebilirim?ngRepeat süzgeçten elde edilen süzgeç

Bu, OOB ng tekrar filtresiyle yapılabilir mi?

Sen tarafından filtrelemek için argüman geçmesi gerekiyor Veri

{ 
    Name: 'John Smith', 
    Manager: { 
    id: 123, 
    Name: 'Bill Lumburg' 
    } 
} 

ngRepeat

<li ng-repeat="e in emps | filter:Manager.Name">{{ e.Name }}</li> 

cevap

97

:

<input ng-model="filter.key"> 
<ul> 
    <li ng-repeat="e in list | filter: {Manager: {Name: filter.key}}"> 
    {{e.Name}} (Manager: {{e.Manager.Name}}) 
    </li> 
</ul> 

Example on Plunker

+2

bazı nesneler hiçbir menajer mülkünüz varsa bunlar filtre boş olsa bile görünmez. Bunları dahil etmenin bir yolunu biliyor musun? – Bludwarf

+1

İsim bir dizilim ise ve sadece First-Name'i filtrelemek istiyorsam ne olur? – rocketspacer

+1

@Bludwarf http://plnkr.co/edit/dMbYapbySJMGKiykvpG7?p=preview belki bu birisine yardımcı olabilir – ANinJa

1

Angularjs iç içe geçmiş nesnedeki en son sürümde, varsayılan olarak filtreyi kullan.

+0

Sevgili @Murali yukarıdaki çözüm sadece açısal 1. –

2

Birden çok derin özelliğe sahip filtrelemek için özel filtre oluşturmamız gerekiyor. Ne demek istediğim, nesnedeki verileri filtrelemek ve gerekli nesneyi (filtrelenmiş nesne) döndürmek için kendi işlevimizi oluşturmamız gerekiyor. dönmek denetleyicisi olarak

<div> 
    //search input textbox 
    <input ng-model="searchDocument" placeholder="Search"> 
</div> 
<div ng-repeat="document in documentList | filter: filteredDocument"> 
    //our html code 
</div> 

biz bilgileri filtre fonksiyonu - belge listesini göstermek için ng tekrar kullanmak HTML'de

[ 
{ 
    "document":{ 
     "documentid":"1", 
     "documenttitle":"test 1", 
     "documentdescription":"abcdef" 
     } 
}, 
{ 
    "document":{ 
     "documentid":"2", 
     "documenttitle":"dfjhkjhf", 
     "documentdescription":"dfhjshfjdhsj" 
     } 
} 
] 

-

Örneğin I nesne aşağıdaki verileri filtre uygulayıp çıkarmaya ihtiyacı "documenttitle" ve "documentdescription" olan nesnenin iki özelliğini kullanarak filtrelenmiş nesne, kod örneği aşağıdaki gibidir -

function filterDocuments(document) 
     { 
      if($scope.searchDocument) 
      { 
        if(document.documentTitle.toLowerCase().indexOf($scope.searchDocument.toLowerCase()) !== -1 || document.document.shortDescription.toLowerCase().indexOf($scope.searchDocument.toLowerCase()) !== -1) 
       { 
        //returns filtered object 
        return document 
       } 
      }else { 
       return document; 
      } 
     } 

$ scope.searchDocument, kullanıcının arama metnini girebileceği arama metin kutusuna (HTML giriş etiketi) bağlanan kapsam değişkenidir.

+0

Bu cevabı çok kafa karıştırıcı buluyorum. Bu soruya nasıl cevap veriyor? –

+0

Sevgili Efendim (@Jason Swett), Nesne dizisine sahip olduğumuzda ve bu nesnenin içinde nesne nesnesinin "belge" özelliği için başka bir nesne özelliği varsa, o zaman "aramayı" uygulamak için denetleyicide özel filtre oluşturmamız gerekir. işlevsellik gibi. –

2

Birden fazla özelliği filtreliyorsanız, sözdizimi aşağıdakine benzer olur.

<ul> 
    <li ng-repeat="item in list | {filter: top_object_property_name: value, top_object_property_with_nested_objects_name: {nested_object_property_name: value}}"> 
     ... 
    </li> 
</ul> 

örn:

 var employees = [name: 'John', roles: [{roleName: 'Manager'},{roleName: 'Supervisor'}]]; 

     <li ng-repeat="staff in employees | {filter: name: 'John', roles: {roleName: 'Manager'}}"> 
       ... 
     </li> 
İlgili konular