2016-11-18 110 views
0

AngularJS過濾器的所有信息都是關於簡單過濾器的簡單示例(主要針對單個字段的值)。AngularJS - 基於類別的複雜過濾器

我後來的事情有點複雜。想象一下,你有以下的JSON對象的數組:

{ 
    "Categoria": "Informática", 
    "Title": "Consultor DBA Oracle", 
    "professionalarea": { 
     "idAreaProfissional": 1, 
     "description": "IT" 
    }, 
    "Horario": "Estágio Profissional" 
}, { 
    "Categoria": "Finanças", 
    "Title": "Gestor de Projeto", 
    "professionalarea": { 
     "idAreaProfissional": 1, 
     "description": "IT" 
    }, 
    "Horario": "Full-time" 
} 

我的目標是創建一個前端接口,可以讓我各種過濾累計適用於那些JSON對象。

我有一個例子我以下:

jsfiddle

回答

0

對於過濾器有很多種選擇:

字符串:該字符串用於針對數組的內容匹配。將返回與該字符串匹配的數組中具有字符串屬性的所有字符串或對象。這也適用於嵌套的對象屬性。謂詞可以通過在字符串前加上!來取代。

實施例(搜索是一個簡單的搜索字符串,在搜索所有字段):

ng-repeat="player in filteredPlayers | filter:search" 

對象:圖案對象可用於在由陣列包含的對象過濾特定的屬性。例如{名稱:「M」,電話:「1」}謂詞將返回一個包含屬性名稱包含「M」和屬性手機包含「1」的項目數組。可以使用特殊的屬性名稱(默認爲$)(例如在{$:「text」}中)來接受對該對象的任何屬性或其嵌套對象屬性的匹配。這相當於如上所述的簡單子串匹配字符串。使用anyPropertyKey參數可以覆蓋特殊屬性名稱。謂詞可以通過在字符串前加上!來取代。例如{name:「!M」}謂詞將返回一個包含屬性名稱不包含「M」的項目數組。

實施例(過濾2特定字段與特定的值)

ng-repeat="player in filteredPlayers | filter:{Categoria: cat,Title: tit}" 

注意,已命名的屬性將在同一水平上只匹配特性,而特殊的$屬性將在相同的級別相匹配的屬性或更深。例如。 {name:{first:'John',last:'Doe'}}不會與{name:'John'}匹配,但會被匹配{$:'John'}。

函數(值,索引,數組):謂詞函數可用於編寫任意過濾器。該函數是爲數組的每個元素調用的,元素,索引和整個數組本身都是參數。

最終結果是謂詞返回true的那些元素的數組。

ng-repeat="player in filteredPlayers | filter:selection" 

在你的應用程序腳本(帶有自定義函數selection()過濾)(自定義功能,過濾器只與一些可選值項):

$scope.selection=function(value, index, array){ 
    if (value.Horario == 'Full time' || value.Horario == 'Estágio Profissional'){ 
    return true; 
    } 
    return false; 
} 
+0

我所需要的,如果回報我在我的JSON自動的價值,但我會嘗試改變我的代碼,因爲我沒有'工作 –

+0

在我的例子jsfidlle工作正常,但是當我嘗試把professionalarea.description不起作用 –

+0

你可以創建一個jsfiddle與該案件,以檢查什麼可能是錯的? –