2013-05-13 15 views
138

Ho un binding di modello che visualizza un attributo di modello chiamato 'date' che è una data, utilizzando il filtro della data di Angular.Modello Angularjs Valore predefinito se Binding Null/Undefined (With Filter)

<span class="gallery-date">{{gallery.date | date:'mediumDate'}}</span> 

Fin qui tutto bene. Tuttavia, al momento, se non c'è alcun valore nel campo della data, l'associazione non mostra nulla. Tuttavia, mi piacerebbe che mostrasse la stringa "Varie" se non c'è una data.

posso ottenere la logica di base utilizzando un operatore binario:

<span class="gallery-date">{{gallery.date || 'Various'}}</span> 

Tuttavia non riesco a farlo funzionare con il filtro Data:

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Various"}}</span> 

Come posso usare il binario operatore a fianco del filtro data?

risposta

236

Risulta tutto quello che dovevo fare era avvolgere il lato sinistro dell'espressione tra parentesi morbide:

<span class="gallery-date">{{(gallery.date | date:'mediumDate') || "Various"}}</span> 
+1

Questo non funzionerebbe se il valore è ' "1"' – 0xcaff

+11

Questo non funziona se è necessario per visualizzare un valore '0' in colonna –

+5

@neelshah Funziona se si fa qualcosa del tipo: '{{(gallery.date | date: 'mediumDate') || "0"}} ' –

25

Solo nel caso si vuole provare qualcosa di diverso. Questo è ciò che ha funzionato per me:

Sulla base ternario operatore che ha seguente struttura:

condition ? value-if-true : value-if-false 

Come risultato:

{{gallery.date?(gallery.date | date:'mediumDate'):"Various" }} 
+0

La risposta di Pedr (13 maggio 13 alle 13:27, http://stackoverflow.com/a/16523266/1563880) è quasi la stessa, ma la tua soluzione è più esplicita. Howerer, più lettere da scrivere) – nktssh

+1

Questo è più intuitivo, soprattutto quando proviene da un background di programmazione. Gli operatori ternari spianano la strada per il semplice If else Ifs. – asgs

+2

scusa per eseguire il bump di un thread precedente, ma probabilmente questa soluzione è anche più performante della risposta accettata, perché non chiama il filtro se il valore risulta falso – SnailCoil

49

ho fatto la seguente filtro:

angular.module('app').filter('ifEmpty', function() { 
    return function(input, defaultValue) { 
     if (angular.isUndefined(input) || input === null || input === '') { 
      return defaultValue; 
     } 

     return input; 
    } 
}); 

Per essere utilizzato in questo modo:

<span>{{aPrice | currency | ifEmpty:'N/A'}}</span> 
<span>{{aNum | number:3 | ifEmpty:0}}</span> 
+0

Soluzione cool! Molto elegante! Mi piace ;-) – llasarov

+0

Un'idea davvero incredibile! L'ho estesa e duplicata un po 'però: annidando un'istruzione 'if (angular.isUndefined (defaultValue) || ...) all'interno di quella esistente, attraverso la quale il filtro' defString' restituisce la stringa "' default' "(altri verrà probabilmente dopo). Questo mi permette di usarlo come ' {{expected.string | defString}} 'e ottieni' default' come livello di fallback finale. – ZaLiTHkA

0

Come è possibile utilizzare l'operatore binario accanto al filtro della data?

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Date Empty"}}</span> 

provare anche:

<span class="gallery-date">{{ gallery.date == 'NULL' ? 'mediumDate' : "gallery.date"}}</span> 
Problemi correlati