2014-11-20 14 views
9

Perché il secondo pulsante non funziona, quando ng-if viene utilizzato?ng-clic non funziona con ng-if

Voglio realizzare un pulsante che è presente solo quando il valore del modello è impostato/non ""/non nullo.

Template:

<input type="text" ng-model="blub"/> 
<br/> 
<button ng-click="blub = 'xxxx'">X</button> 
<br/> 
<button ng-click="blub = 'yyyy'" ng-if="blub.length">Y</button> 

Controller:

angular.module('test', []) 
.controller('Main', function ($scope) { 
    // nothing to do here 
}); 

di giocare: JSFiddle

+0

Che cosa si usa 'ng-if' per? –

+0

Controlla la variabile scope 'blub' per una lunghezza! = 0. Quindi mi mostra un pulsante. Alla fine voglio usare quel pulsante per disinserire la variabile. Ciò consente all'utente di rimuovere completamente il valore. Per esempio. 'blub' è una parte di un oggetto e dovrebbe essere impostato solo se l'utente lo desidera impostare. –

+0

BTW: Ho anche incontrato questo [bug] (http://forum.ionicframework.com/t/ng-click-wrapped-by-label-doesnt-work-when-migrated-from-beta-8-to- beta-11/8000/3) (Ionic?) che ha reso inutile il ng-click se un

risposta

16

Uso ng-show Invece di ng-if. Questo dovrebbe funzionare

Fiddle

+0

Come hai creato il pulsante Fiddle? –

+5

Avvolgere il collegamento tra '' tag :). –

+0

Cool, stavo per dare una risposta che usa ng-show ma non è stato in grado di farmi fare il codice angolare :( –

6

Non funziona perché ng-se è la creazione di un nuovo ambito e interpretando 'aaaa' tuoi blub = come la definizione di una nuova variabile locale nel nuovo ambito. È possibile verificare questo mettendo il secondo pulsante per:

<button ng-click="$parent.blub = 'yyyy'" ng-if="blub.length">Y</button> 

Tuttavia $ genitore è una caratteristica brutto.

+1

Si prega di definire brutto. –

+0

È molto facile ingrandire il codice con $ parent, ad esempio concatenando le chiamate $ parent ($ parent. $ Parent.property). – Viktor

3

Il pulsante non funziona a causa dell'ambito nidificato creato da ng-if. Il numero blub associato al secondo pulsante non è lo stesso blub associato al primo.

È possibile utilizzare ng-show anziché ng-if, poiché utilizza l'ambito del genitore, ma è solo evitando il problema anziché risolverlo. Leggi nested scopes in modo da poter capire cosa è realmente successo.

Inoltre, check this out: fiddle

3

Prova a mettere una magia dot sulla variabile

<input type="text" ng-model="bl.ub"/> 
<br/> 
<button ng-click="bl.ub = 'xxxx'">X</button> 
<br/> 
<button ng-click="bl.ub = 'yyyy'" ng-if="bl.ub.length">Y</button> 

jsfiddle

Problemi correlati