Отключить кнопку, когда вход пуст в Angular 2

Я хочу проверить, пуст ли вход.

  • Если не пуст, включите кнопку отправки.
  • Если пусто, отключите отправку Кнопка.

Я пробовал (oninput) и (onchange), но они не запускаются.

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

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

Ответ 1

В этом случае я бы использовал инструменты проверки формы. Я бы добавил "требуемую" проверку на вашем входе и использовал глобальное состояние вашей формы, чтобы отключить/включить вашу кнопку.

При использовании подхода, основанного на шаблонах, нет кода для добавления в ваш компонент, только материал в его шаблоне...

Ниже приведен пример:

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

Ответ 2

Чтобы связывать функции с событиями, вам не нужно префикс их с помощью on. Просто разместите событие.

Например, если вы хотите обработать демонстрацию keydown (plunker):

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

Но в вашем конкретном случае, поскольку вы уже используете ngModel, вам лучше использовать (ngModelChange):

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

Потому что он подберет изменения, когда пользователь вставляет (через CTRL+V или mouse right click menu -> Paste) пароль вместо его ввода.

Смотрите демонстрацию plunker для использования (ngModelChange) здесь.