2014-11-20 16 views
9

Dlaczego drugi przycisk nie działa, gdy ng-if jest używany?ng-click nie działa z ng-if

Chcę zrealizować przycisk, który jest obecny tylko wtedy, gdy wartość modelu jest ustawiona/nie ""/nie jest pusta.

Szablon:

<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> 

Kontroler:

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

się bawić: JSFiddle

+0

Co używacie 'NG-if' za? –

+0

Sprawdza zmienną zasięgu 'blub' dla długości! = 0. Następnie pokazuje mi przycisk. Na koniec chcę użyć tego przycisku, aby usunąć zmienną. To pozwala użytkownikowi całkowicie usunąć wartość. Na przykład. 'blub' jest częścią obiektu i powinno być ustawione tylko wtedy, gdy użytkownik chce je ustawić. –

+0

BTW: Wpadłem też na ten [błąd] (http://forum.ionicframework.com/t/ng-click-wrapped-by-label-doesnt-work-when-migrated-from-beta-8-to- beta-11/8000/3) (Ionic?), dzięki czemu ng-click jest bezużyteczny, jeśli

Odpowiedz

16

Zastosowanie ng-show Zamiast ng-if. To powinno działać.

Fiddle

+0

Jak stworzyłeś przycisk Fiddle? –

+5

Zawij link pomiędzy '' tag :). –

+0

Fajnie, już miałem dać odpowiedź, która używa ng-show, ale nie był w stanie zrobić skrzypiec z kanciastym kodem :( –

6

To nie działa, ponieważ NG-jeśli jest stworzenie nowego zakresu i interpretacji „yyyy” Twoje Blub = jak definiowania nowej zmiennej lokalnej w nowym zakresie. Można to sprawdzić poprzez umieszczenie drugiego przycisku do:

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

Jednak $ rodzic jest brzydka cecha.

+1

Proszę określić brzydko. –

+0

Bardzo łatwo jest nadpisać kod za pomocą $ parent, na przykład łączenie $ parent calls ($ parent. $ Parent.property). – Viktor

3

Przycisk nie działa z powodu zagnieżdżonego zakresu utworzonego przez ng-if. blub przywiązany do drugiego przycisku nie jest tym samym blub, który jest związany z pierwszym.

Możesz użyć ng-show zamiast ng-if, ponieważ używa on zasięgu swojego rodzica, ale to tylko unika problemu, zamiast go rozwiązywać. Przeczytaj o nested scopes, abyś mógł zrozumieć, co się właściwie wydarzyło.

Również to sprawdzić: fiddle

3

Spróbuj oddanie magiczną kropkę na zmiennej

<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