2016-02-20 15 views
11

Chcę sprawdzić, czy wejście jest puste.Wyłącz przycisk, gdy wejście jest puste w Angular 2

  • Jeśli nie jest pusty, włącz przycisk wysyłania.
  • Jeśli jest pusty, wyłącz przycisk Wyślij .

Próbowałem (oninput) i (onchange), ale one nie działają.

<input type="password" [(ngModel)]="myPassword" (oninput)="checkPasswordEmpty()"/> 

checkPasswordEmpty() { 
    console.log("checkPasswordEmpty runs"); 
    if (this.myPassword) { 
     // enable the button 
    } 
} 

Odpowiedz

15

W tym przypadku użyłbym walidatorów formularzy. Dodałbym "wymaganą" walidację do twoich danych wejściowych i użyję stanu globalnego twojego formularza do wyłączenia/włączenia twojego przycisku.

Dzięki podejściu kierowanym szablonu, nie ma kodu, aby dodać do swojego urządzenia, tylko rzeczy w swoim szablonie ...

Oto próbka poniżej:

<form #formCtrl="ngForm"> 
    <input ngControl="passwordCtrl" required> 
    <button [disabled]="!formCtrl.form.valid">Some button</button> 
</form> 
+0

Tak, możesz utworzyć kontrolki w samym komponencie ;-) Nie ma za co! –

+1

Korzystanie z nowego interfejsu API Forms (https://angular.io/docs/ts/latest/guide/forms.html) - '' –

1

Aby powiązać funkcje z wydarzeniami, nie trzeba ich poprzedzać prefiksem on. Po prostu umieść wydarzenie.

Na przykład, jeśli chcesz obsługiwać keydown (plunker demo):

<input type="password" [(ngModel)]="myPassword" (keydown)="checkPasswordEmpty($event)"/> 

Ale w konkretnym przypadku, ponieważ już używasz ngModel jesteś lepiej wyłączyć za pomocą (ngModelChange):

<input type="password" [(ngModel)]="myPassword" (ngModelChange)="checkPasswordEmpty()"/> 

Ponieważ wykryje zmiany, gdy użytkownik wklei (przez CTRL + V lub kliknij prawym przyciskiem myszy menu -> Wklej) hasło zamiast go wpisywać.

Zobacz plunker demo for using (ngModelChange) here.

+0

Spójrz na 'app/plik app.component.ts w plunkerze. – acdcjunior

+0

dziękuję, działa idealnie! –

+0

@HongboMiao Właśnie coś sobie przypomniałem. W twoim przypadku użycie '(ngModelChange)' jest prawdopodobnie lepsze niż '(keydown)', ponieważ jeśli użytkownik wklei hasło, 'keydown' nie wykryje zmiany, podczas gdy' (ngModelChange) 'będzie. – acdcjunior