Як відключити вхід у angular2


123

У тс is_edit = trueвідключити ...

<input [disabled]="is_edit=='false' ? true : null" id="name" type="text" [(ngModel)]="model.name" formControlName="name" class="form-control" minlength="2">

Я просто хочу відключити вхід на основі trueабо false.

Я спробував наступне:

[disabled]="is_edit=='false' ? true : null"
[disabled]="is_edit=='true'"
[disabled]="is_edit"

10
Ви вже задавали це запитання і вже мали відповідь, але потім видалили питання. Знову відкрийте консоль браузера, щоб помітити помилки, виправити їх (тобто використовувати ім’я, а не formControlName), а потім це працює: plnkr.co/edit/al2IkGkaZKpdLKKTfvKh?p=preview
JB Nizet

Справжня проблема тут полягає в тому, що ви змішуєте форми на основі шаблонів з реактивними формами. Використовуйте те чи інше, а не те й інше. @ AJT_82 має правильну відповідь.
adam0101

Відповіді:


317

Спробуйте використовувати attr.disabledзамістьdisabled

<input [attr.disabled]="disabled ? '' : null"/>

5
Якщо встановити значення attr на null, щоб НЕ додати attr до елемента - виглядає як хак - але воно насправді працює і навіть робить сенс, заднім числом.
c69

2
disabledдорівнює trueабоfalse
Белтер

18
Дякую за відповідь, яка насправді працює! То чому ж attr.disabledпрацює, коли disabledні?
Ділантхепігуй

5
Хоча це працює, це злом, який не вирішує справжню проблему змішування форм на основі шаблону з реактивними формами. В ОП слід використовувати те чи інше, а не те і інше.
adam0101

2
<input [attr.disabled] = "вимкнено || null" /> Я думаю, що також працювати
Francesco

41

Я думаю, я вирішив проблему, це поле введення є частиною реактивної форми (?), Оскільки ви включили її formControlName. Це означає, що те, що ви намагаєтеся зробити, відключивши поле введення is_edit, не працює, наприклад, ваша спроба [disabled]="is_edit", яка б працювала в інших випадках. Зі своєю формою потрібно зробити щось подібне:

toggle() {
  let control = this.myForm.get('name')
  control.disabled ? control.enable() : control.disable();
}

і втратити is_editвзагалі.

якщо ви хочете, щоб поле введення було відключено за замовчуванням, вам потрібно встановити контроль форми як:

name: [{value: '', disabled:true}]

Ось плаунер


30

Ви могли просто зробити це

<input [disabled]="true" id="name" type="text">

1
Хоча це працює, це дозволяє припустити, що "false" дозволить керувати, чого немає, оскільки наявність атрибута вимкнено - це те, що вплинуло на керування, а не на значення.
Мекавелі

@Mecaveli, встановлення [disabled] на false фактично дозволяє керувати. <input [disabled] = "false" id = "name" type = "text"> робить поле введення ввімкнено. Ви можете перевірити свій кутовий додаток.
Ifesinachi Bryan

1
Просто щоб виправити себе тут: Як я дізнався, [disabled] насправді не керує значенням атрибута "disabled" html на зразок [attr.disabled]. Для цього [disabled] = "false" працює, хоча "false" як значення для атрибута html "відключити" не буде.
Мекавелі

6
Таким чином, ви, власне, повинні використовувати свій редактор і спробувати його, перш ніж з’ясувати зустрічну точку.
Ifesinachi Bryan

Дійсно, вибачте за заборону, на жаль, зараз не можна скасувати. Зловживали [attr.disabled] роками, думаючи (а точніше не дуже думаючи), це дорівнює [інвалідам] ...
Mecaveli

26

Якщо ви хочете, щоб вхід було відключено в деякому операторі. використовувати [readonly]=trueабо falseзамість цього вимкнено.

<input [readonly]="this.isEditable" 
    type="text" 
    formControlName="reporteeName" 
    class="form-control" 
    placeholder="Enter Name" required>

1
Реактивне дружнє рішення.
Джон Дір

1
Це вірно. Для мене [attr.disabled] = "інвалід" працював лише в одну сторону, тобто вхід залишився в початковому стані відключеного / включеного
spiritworld

Дуже дякую за це!
Назір

Nazirнемає проблем
Usman Saleh

13
<input [disabled]="is_edit" id="name" type="text">
<button (click)="is_edit = !is_edit">Change input state</button>

export class AppComponent {
  is_edit : boolean = false;
}

1
Якщо ви помістите журнал консолі в метод isDisabled, виконуються сотні консольних журналів. Якщо в методі isDisabled є складна логіка, це може бути проблемою. Тож я не впевнений, що це хороше рішення.
Тева

1
Не ставте динамічну перевірку на кутові змінні або ви отримаєте нескінченний цикл. Ви можете використовувати [disabled]="is_edit"безпосередньо. Чому isDisabled()функція?
alex351

оновити код, щоб безпосередньо змінити статус введення.
Йоав Шньєдерман

7

Я припускаю, що ти мав на увазі falseзамість цього'false'

Крім того , [disabled]очікує Boolean. Вам слід уникати повернення null.


4

Зауваження у відповідь на коментар Бельтера щодо прийнятої відповіді fedtuck вище, оскільки мені не вистачає репутації для додавання коментарів.

Це не відповідає дійсності жодної із мене, відповідно до документів Mozilla

інвалід дорівнює істинному або хибному

Коли атрибут вимкнено, елемент відключається незалежно від значення. Дивіться цей приклад

<input placeholder="i can be changed"/>
<input disabled placeholder="i can NOT be changed"/>
<input disabled="true" placeholder="i can NOT be changed"/>
<input disabled="false" placeholder="i can NOT be changed"/>

3
це правда і цілком правда для чистого Html, але для кутових, ви повинні надати булеве значення для інвалідів, особливо коли ви робите двостороння прив'язка.
Іфісінахі Брайан

4

Я вважаю за краще це рішення

У файлі HTML:

<input [disabled]="dynamicVariable" id="name" type="text">

У файлі TS:

dynamicVariable = false; // true based on your condition 

3

Те, що ви шукаєте, відключено = "true" . Ось приклад:

<textarea class="customPayload" disabled="true" *ngIf="!showSpinner"></textarea>

6
Це невірно, disabledатрибут HTML та DOM є "булевим атрибутом", що означає, що потрібно вказати лише ім'я атрибута - або його значення повинно бути рівним disabled, наприклад disabled="disabled" - it does not recognize the values of true` або false- тому disabled="false"все одно призведе до відключення елемента.
Дай

2

Демо

виготовлення is_editтипу булева.

<input [disabled]=is_edit id="name" type="text">

export class App {
  name:string;
  is_edit: boolean; 
  constructor() {
    this.name = 'Angular2'
    this.is_edit = true;
  }
}

2

Вимкнути TextBox в кутовій 7

<div class="center-content tp-spce-hdr">
  <div class="container">
    <div class="row mx-0 mt-4">
      <div class="col-12" style="padding-right: 700px;" >
          <div class="form-group">
              <label>Email</label>
                <input [disabled]="true" type="text" id="email" name="email" 
                [(ngModel)]="email" class="form-control">
          </div>
     </div>
   </div>
 </div>


0

А також якщо поле / кнопка введення має залишатися відключеним, то просто <button disabled>або <input disabled>працює.


0

Інвалід Selectу кутовій 9.

одна річ пам’ятайте, що booleanв цьому прикладі працює робота з обмеженими можливостями , я використовую (change)подію з selectможливістю, якщо країна не вибрана, регіон буде відключений.

файл find.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-find',
  templateUrl: './find.component.html',
  styleUrls: ['./find.component.css']
})
export class FindComponent implements OnInit {
  isCountrySelected:boolean;

  constructor() { }
  //onchange event disabled false
 onChangeCountry(id:number){
   this.isCountrySelected = false;
 }
  ngOnInit(): void {
    //initially disabled true
    this.isCountrySelected = true;
  }

}

find.component.html

//Country select option
<select  class="form-control"  (change)="onChangeCountry()" value="Choose Country">
                    <option value="">Choose a Country</option>
                    <option value="US">United States</option>
                     
</select>
//region disabled till country is not selected 
<select class="form-control" [disabled]="isCountrySelected">
                    <option value="">Choose a Region</option>
                    <option value="">Any regions.</option>
                    
                </select>

-1

можна використовувати просто як

     <input [(ngModel)]="model.name" disabled="disabled"

Я отримав це так. тому я віддаю перевагу.


Це не встановлює атрибут відключення динамічно
Benjineer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.