2014-09-16 18 views
5

Perché sarà valori di visualizzazione non angolari che sono nulla quando applico:filtro valore nullo ng-repeat non visualizzazione

ng-repeat="p in foo | filter: filter2" 

dove filtro2 è

$scope.filter2 = function(p){ 
    if (p.state === null){ 
     return p.state; 
    } else{ 
     return; 
    } 
}; 

ecco una plnkr con quello che sto ad esempio: http://plnkr.co/edit/cj3v1fuBu6sHVI7A4qlq?p=preview

Il filtro funziona quando è tutto tranne un valore nullo ma sto cercando di visualizzare solo quelli nulli. Potrei provare a cambiare tutti i valori null su una stringa di valori predefinita diversa da null? C'è un posto dove fare in modo che il filtro funzioni con null?

+0

Soluzione diversa: https://stackoverflow.com/a/24992197/257470 –

risposta

6

Penso che l'unica cosa sbagliata era che era necessario restituire l'intero oggetto.

Sulla base del commento di Brad in basso, sono andato a controllare i documenti e ha ragione. L'unico motivo per cui il mio esempio di codice funziona è perché restituisce un valore "attendibile".

Ho modificato il mio esempio di codice di seguito per tenerne conto.

Ecco il filtro:

$scope.filter2 = function(p){ 
    if (p.state === null){ 
     return true; 
    } else{ 
     return; 
    } 
}; 

Ecco corrispondente sezione nella documentazione:

funzione (reale, expected): La funzione viene assegnato il valore oggetto e il valore predicato confronta e dovrebbe restituire true se l'elemento deve essere incluso nel risultato filtrato.

plunkr

+0

haha, vedo cosa hai fatto. Hai restituito p invece di p.state. Se funziona funziona ... In javascript non puoi restituire un valore nullo? Pensavo che potessi. – Garuuk

+0

Puoi, ma forse ng-repeat non gli piace –

5

| filter:{expression} si aspetta un true o false di valutazione, non un oggetto. Pertanto:

$scope.filter1 = function(p){ 
    return (p.state === 'on'); 
}; 

$scope.filter2 = function(p){ 
    return (p.state === null); 
}; 
14

È possibile filtrare elementi nulli senza scrivere un filtro personalizzato.

Usando il codice nel Plunk, questo restituirà gli articoli nulli:

<ul ng-repeat="p in foo | filter:{state:'!'}" > 
    <li>{{p.name}}</li> 
</ul> 

contrario, questo restituirà tutti gli elementi non nulli:

<ul ng-repeat="p in foo | filter:{state:'!!'}" > 
    <li>{{p.name}}</li> 
</ul> 

L'operatore not doppio converte qualsiasi valore a booleano: il primo operatore non ! converte un valore di verità in un valore booleano false, il secondo inverte il valore booleano su true. Nel mio test il filtro effettivamente funziona semplicemente utilizzando state:'' ma vorrei usare !! solo per essere sul sicuro ...

0

È possibile verificare Null nell'espressione come questo:

ng-repeat="p in foo | filter:{state:null}" 
Problemi correlati