2013-01-23 12 views
43

So come fare un vista condizione in AngularJS, che visualizzerà o elemento nascondere dom dipende dalla condizione:Fai una condizione rendering con AngularJS

<div ng-show="{{isTrue}}">Some content</div> 

ma come si crea un render condizione che determina se rendere o meno il div?

risposta

63

Aggiornamento per angularjs 1.1.5 e, soprattutto, gli utenti (non supportate in 1.0.7):

correlate commettere: https://github.com/angular/angular.js/commit/2f96fbd17577685bc013a4f7ced06664af253944

angolare hanno ora una direttiva resa condizionale: ngIf .

utilizzati:

<div ng-if="conditional_expression"></div> 

noti che quando un elemento è rimosso utilizzando ngIf sua portata è distrutto e un nuovo ambito viene creato quando l'elemento viene ripristinato

Documentation: directive-ngIf

Per gli utenti legacy angularjs:

ngShow direttiva nasconde/mostra l'elemento. Questo sarà cambiato in una delle nuove versioni stabili, ora è disponibile nella versione unstable come con 1.1.5.

Se si desidera aggiungere/rimuovere condizionatamente elementi sul DOM, utilizzare può utilizzare ngSwitch.

<div ng-switch="showMe"> 
    <div ng-switch-when="true">Hello!</div> 
</div> 

In realtà, questa direttiva è stato creato per la gestione dei casi per più di 1, ma è possibile utilizzare in questo modo troppo. Vedere la risposta this per esempi di usi più sofisticati.

+0

Se 'ng-if' è falso, DOM viene sottoposto a rendering ma non è possibile renderlo disponibile? –

1

Ci sono almeno due modi per farlo:

  • rendono alcuni parziale utilizzando templante
  • uso semplice espressione con funzione di rendering condizionale (vedi this fiddle e descrizione sotto)

Per semplice componenti, raccomando di attenersi alla funzione di rendering. Molto facile da capire.

$scope.render = function(condition) {   
    return condition ? "This is rendered when condition == TRUE" : "This is rendered when condition == FALSE"; 
}; 

e semplicemente includere nel vostro HTML, in questo modo:

{{render(true)}} 

Si può anche avvolgere questo con direttiva angolare, che vi darà molto bello markup e possibilità illimitate!

+0

questo è un buon approccio. ma mi aspettavo davvero qualcosa di elegante come ng-render = "{{condition}}" per renderlo davvero semplice e facile – Alon

+0

Per favore leggi attentamente la mia risposta - puoi concludere con la direttiva, che ti darà esattamente ciò di cui hai bisogno - un markup pulito, in questo modo: ' ...' Non penso che Angular fornisca questo fuori dalla scatola. –

+2

La creazione di una direttiva di rendering non è così semplice. OP significa che vorrebbe cambiare la struttura dom, e la direttiva deve osservare la proprietà condizionale e distruggere l'ambito e rilasciare le fonti correlate o è probabile che perdano in memoria. –

3

modo consigliato è quello di utilizzare ng-includono

Esempio: http://jsfiddle.net/api/post/library/pure/

<div ng-app=""> 
    <div ng-controller="Ctrl"> 
    <select ng-model="template" ng-options="t.name for t in templates"> 
    <option value="">(blank)</option> 
    </select> 
    url of the template: <tt>{{template.url}}</tt> 
    <hr/> 
    <div ng-include src="template.url"></div> 
    </div> 


    <!-- template1.html --> 
    <script type="text/ng-template" id="template1.html"> 
    Content of template1.html 
    </script> 

    <!-- template2.html --> 
    <script type="text/ng-template" id="template2.html"> 
    Content of template2.html 
    </script> 
</div> 
+9

Dove è raccomandato? Questo mi sembra un eccessivo uso di piccoli frammenti html. A proposito, il tuo violino non funziona. – Alberto

0

Guarda angular-uiif direttiva. Credo che questo ti possa servire bene.

+0

Sembra che questo sia stato rimosso dall'interfaccia utente angolare. Nessun indizio perché. –

+1

@bmoeskau probabilmente perché ngif è ora parte di AngularJS a partire dalla v1.1.5 – rdjs

+0

Poiché il core AngularJS sta recuperando. – demisx

Problemi correlati