2014-11-20 9 views
9

Warum funktioniert die zweite Schaltfläche nicht, wenn ng-if verwendet wird?ng-click funktioniert nicht mit ng-if

Ich möchte eine Schaltfläche realisieren, die nur vorhanden ist, wenn der Modellwert auf ""/nicht auf Null gesetzt ist.

Vorlage:

<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 
}); 

rumspielen: JSFiddle

+0

Putting Was tun Sie für 'ng-if' verwenden? –

+0

Es prüft die Scope-Variable 'blub' für eine Länge! = 0. Dann zeigt es mir einen Button. Am Ende möchte ich diese Schaltfläche verwenden, um die Variable zu deaktivieren. Dies ermöglicht dem Benutzer, den Wert vollständig zu entfernen. Z.B. 'blub' ist ein Teil eines Objekts und sollte nur gesetzt werden, wenn der Benutzer es einstellen möchte. –

+0

BTW: Ich stieß auch auf diesen [Bug] (http://forum.ionicframework.com/t/ng-click-wrapped-by-label-doesnt-work-when-migrated-from-beta-8-to- beta-11/8000/3) (Ionic?), was den ng-click nutzlos machte, wenn

Antwort

16

Verwenden ng-show Statt ng-if. Das sollte funktionieren.

Fiddle

+0

Wie hast du den Fiddle Button gemacht? –

+5

Wickeln Sie die Verbindung zwischen '' Tag :). –

+0

Cool, ich war im Begriff, Antwort zu geben, die ng-Show verwenden, aber war nicht in der Lage, eckigen Code Geige zu machen :( –

6

Es funktioniert nicht, weil ng-wenn ein neuen Rahmen zu schaffen und Ihre blub = ‚yyyy‘ zu interpretieren als eine neue lokale Variable in dem neuen Bereich zu definieren. Sie können dies testen, indem Sie auf die zweite Schaltfläche setzen zu:

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

jedoch $ parent eine hässliche Funktion.

+1

Bitte definieren hässlich. –

+0

Es ist sehr einfach, Ihren Code mit $ parent aufzublähen, zum Beispiel $ parent calls ($ parent. $ Parent.property) zu verketten. – Viktor

3

Die Schaltfläche funktioniert nicht, da der verschachtelte Bereich von ng-if erstellt wurde. Die an die zweite Schaltfläche gebundene blub ist nicht dieselbe blub, die an die erste gebunden ist.

Sie können ng-show anstelle von ng-if verwenden, da es den Bereich seiner Eltern verwendet, aber das ist nur das Problem zu vermeiden, anstatt es zu lösen. Lesen Sie über nested scopes, damit Sie verstehen können, was tatsächlich passiert ist.

Auch check this out: fiddle

3

Versuchen Sie, eine Magie Punkt auf der Variable

<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

Verwandte Themen