2013-03-27 7 views

risposta

91

{{ counter || '?'}}. Semplicemente javascript. || può essere utilizzato come valore predefinito. Poiché sarebbero diversi messaggi vuoti in ognuno, una direttiva generalizzata non sarebbe adatta per molti casi.

Se si desidera applicare una classe diversa da quelle vuote, che è anche built-in:

<div ng-class="{empty: !counter}" ng-bind="counter || ?"></div> 
+11

FWIW, assicurati di inserire il valore predefinito prima di qualsiasi filtro (ad esempio '{{counter || '?' | Myfilter}}'). – Jesse

+3

Enorme +1 a @Jesse – zmanc

+9

Questa risposta è semplice e pulita, ma lo svantaggio è che non visualizzerà solo il segnaposto su "null" e "undefined", ma anche su "0", che può essere un valore valido. – tiledcode

25

vorrei fare in questo modo, ma forse c'è un modo migliore:

angular.module('app').filter('placeholdEmpty', function(){ 
    return function(input){ 
    if(!(input == undefined || input == null)){ 
     return input; 
    } else { 
     return "placeholder"; 
    } 
    } 
}); 

e quindi utilizzare {{ x | placeholdEmpty}}

+4

Il vantaggio della soluzione filtro over {{contatore || '?'}} è che puoi distinguere tra undefined, null o zero. –

+0

Un altro importante vantaggio del filtro segnaposto è che in futuro è possibile modificare facilmente il testo segnaposto, se si decide di non gradire "?" ... – hendrix

+0

E come si applica un filtro a x? – ignaces

13

lo faccio con ng-spettacolo, in questo modo:

<strong>{{username}}</strong> 
<span class="empty" ng-show="!username">N/A</span> 

Certo, aggiunge molti più elementi a mio avviso che potrei essere in grado di gestire in modo diverso. Mi piace però quanto sia facile vedere chiaramente dove sono il mio segnaposto/i valori vuoti, e posso anche modificarli in modo diverso.

5

Implementare default filtro:

app.filter('default', function(){ 
    return function(value, def) { 
    return (value === undefined || value === null? def : value); 
    }; 
}); 

e usarlo come:

{{ x | default: '?' }} 

Il vantaggio della soluzione di filtro su {{ x || '?'}} è che è possibile distinguere tra undefined, null o 0.

2

Implementazione di filtri predefiniti-ish funziona, ma se si sta utilizzando solo i numeri si può usare di propria angolare number filter

Se l'input è null o undefined, sarà solo essere restituito. Se l'input è infinito (Infinity o -Infinity), viene restituito il simbolo Infinito '∞' o '-∞', rispettivamente. Se l'input non è un numero, viene restituita una stringa vuota .

{{ (val | number) || "Number not provided"}} 
+1

Grazie! Funziona anche con ng-bind = "(val | number) || 'Default'"! –