Кнопка відключення Angular2


113

Я знаю, що в angular2 я можу відключити кнопку з [disable]атрибутом, наприклад:

<button [disabled]="!isValid" (click)="onConfirm()">Confirm</button>

але чи можу це зробити за допомогою [ngClass]або [ngStyle]? Так:

<button [ngStyle]="{disabled : !isValid}" (click)="onConfirm()">Confirm</button>

Дякую.


1
тут працює plnkr для того ж plnkr.co/edit/MW3vT4XscWcKrDdAwBoE?p=preview
Pardeep Jain

Відповіді:


173

Оновлення

Я задаюся питанням. Чому ви не хочете використовувати [disabled]прив'язку атрибутів, надану Angular 2? Це правильний спосіб вирішити цю ситуацію. Я пропоную вам перенести isValidчек за допомогою компонентного методу.

<button [disabled]="! isValid" (click)="onConfirm()">Confirm</button>

Проблема з тим, що ви намагалися пояснити нижче

В основному ви можете використовувати ngClassтут. Але додавання класу не обмежує подію від запуску. Для запуску події на дійсному вході слід змінити clickкод події нижче. Тож onConfirmзвільнятимуться лише тоді, коли поле дійсне.

<button [ngClass]="{disabled : !isValid}" (click)="isValid && onConfirm()">Confirm</button>

Демо тут


Ну я додаю, що ngClass вже є у кнопці, тому мені здається, що інвалідам потрібно бути там, чому віддається перевага способу [disabled]?
Нір Шварц

@ NirSchwartz, оскільки він буде робити обидві речі одночасно .. Правила селекторного css будуть застосовані до button[disabled]селекторних і відключених подій, обмежуватимуть clickподію на активацію кнопки .. у ngClassкласовій речі вам потрібно обробляти її самостійно, як я показав у вище відповідь ..
Панкай Паркер

Причина, чому люди хочуть використовувати [attr.disabled], а не [disabled], полягає в тому, що кутовий FormControl [відключений] не може бути встановлений динамічно. Ось випуск github.com/angular/angular/isissue/11271
davyzhang

1
Ви не повинні викликати метод у прив'язці шаблону. [disabled]="!isValid"
Том

3
Ахааа .. якщо метод має просто змінну посилання, то його добре .. Якщо у вас є складна логіка всередині функції, то це не є кращим. Ви маєте рацію, у цьому випадку я можу безпосередньо зателефонувати isValidпрапором у інтерфейсі користувача
Панкай Паркер

39

Я рекомендував би наступне.

<button [disabled]="isInvalid()">Submit</button>

4
Чи не краще уникати викликів функцій у html, як це буде називатися кожним галочкою / циклом?
Іоанн



5

Використання ngClassвідключеної кнопки для недійсної форми не є хорошою практикою в Angular2, коли вона надає вбудовані функції для включення та відключення кнопки, якщо форма є дійсною та недійсною відповідно, не докладаючи зайвих зусиль / логіки.

[disabled] зробить все, начебто, якщо форма є дійсною, тоді вона буде включена, а якщо форма недійсною, то вона буде відключена автоматично.

Див. Приклад:

<form (ngSubmit)="f.form.valid" #f="ngForm" novalidate>
<input type="text" placeholder="Name" [(ngModel)]="txtName" name="txtname" #textname="ngModel" required>
<input type="button" class="mdl-button" [disabled]="!f.form.valid" (click)="onSave()" name="">


3

Може бути нижче коду може допомогти:

<button [attr.disabled]="!isValid ? true : null">Submit</button>

Це не гарне рішення, оскільки <button disabled="">або <button disabled="false">досі обробляється як відключена кнопка в більшості браузерів
BillyTom

2

Я спробував використати відключений разом із подією кліку. Нижче наведено фрагмент, прийнята відповідь також спрацювала чудово, я додаю цю відповідь, щоб навести приклад того, як її можна використовувати з відключеними властивостями та властивостями клацання.

<button (click)="!planNextDisabled && planNext()" [disabled]="planNextDisabled"></button>

2

Якщо ви використовуєте реактивні форми і хочете відключити деякий вхід, пов’язаний з керуванням формою, вам слід ввести цю disabledлогіку в код і зателефонувати yourFormControl.disable()абоyourFormControl.enable()


2

Я думаю, що це найпростіший спосіб

<!-- Submit Button-->
<button 
  mat-raised-button       
  color="primary"
  [disabled]="!f.valid"
>
  Submit
</button>

1
 <button [disabled]="this.model.IsConnected() == false"
              [ngClass]="setStyles()"
              class="action-button action-button-selected button-send"
              (click)= "this.Send()">
          SEND
        </button>

.ts код

setStyles() 
{
    let styles = {

    'action-button-disabled': this.model.IsConnected() == false  
  };
  return styles;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.