Jak wyłączyć wejście w angular2


123

W ts, is_edit = trueaby wyłączyć ...

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

Chcę po prostu wyłączyć dane wejściowe oparte na truelub false.

Próbowałem śledzić:

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

10
Już zadałeś to pytanie i już miałeś odpowiedź, ale potem usunąłeś pytanie. Ponownie otwórz konsolę przeglądarki, aby zauważyć błędy, napraw je (tj. Użyj nazwy, a nie formControlName), a potem działa: plnkr.co/edit/al2IkGkaZKpdLKKTfvKh?p=preview
— JB Nizet

Prawdziwy problem polega na tym, że mieszasz formularze oparte na szablonach z formularzami reaktywnymi. Użyj jednego lub drugiego, a nie obu. @ AJT_82 ma poprawną odpowiedź.
— adam0101

Odpowiedzi:


318

Spróbuj użyć attr.disabledzamiastdisabled

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

5
Ustawienie wartości attr na null, aby NIE dodawać atr do elementu - wygląda jak hack - ale faktycznie działa, a nawet ma sens z perspektywy czasu.
— c69

2
disabledrówna się truelubfalse
— Belter

18
Dziękuję za odpowiedź, która faktycznie działa! Dlaczego więc attr.disableddziała, kiedy disablednie?
— Dylanthepiguy

5
Chociaż to działa, jest to sztuczka, która nie rozwiązuje prawdziwego problemu mieszania formularzy opartych na szablonach z formularzami reaktywnymi. OP powinien używać jednego lub drugiego, a nie obu.
— adam0101

2
<input [attr.disabled] = "disabled || null" /> Myślę, że też działa
— Francesco

41

Myślę, że rozwiązałem problem, to pole wejściowe jest częścią formularza reaktywnego (?), Ponieważ włączyłeś formControlName. Oznacza to, że to, co próbujesz zrobić, wyłączając pole wprowadzania danych, is_editnie działa, np. Twoja próba [disabled]="is_edit", która w innych przypadkach zadziała. W swoim formularzu musisz zrobić coś takiego:

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

i is_editcałkowicie stracić .

jeśli chcesz, aby pole wejściowe było domyślnie wyłączone, musisz ustawić kontrolkę formularza jako:

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

Oto plunker


30

Możesz to po prostu zrobić

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

1
Chociaż to działa, sugeruje, że "false" włączy kontrolę, czego nie robi, ponieważ obecność atrybutu disabled jest tym, co spowodowało błąd kontrolki, a nie wartością.
— Mecaveli

@Mecaveli, ustawienie [wyłączone] na false faktycznie włącza kontrolę. <input [disabled] = "false" id = "name" type = "text"> włącza pole wejściowe. Możesz sprawdzić swoją aplikację kątową.
— Ifesinachi Bryan

1
Aby to poprawić: Jak się dowiedziałem, [disabled] w rzeczywistości nie kontroluje wartości atrybutu html „disabled”, tak jak [attr.disabled]. Dlatego [disabled] = „false” działa, chociaż „false” jako wartość atrybutu html „disable” nie.
— Mecaveli,

6
Podsumowując, powinieneś faktycznie użyć swojego edytora i wypróbować go, zanim pojawi się kontrapunkt.
— Ifesinachi Bryan,

Rzeczywiście, przepraszamy za odrzucenie głosów, niestety nie można tego teraz cofnąć. Nadużywał [attr.disabled] przez lata, myśląc (a raczej niewiele myśląc), równy [niepełnosprawny] ...
— Mecaveli

26

Jeśli chcesz, aby dane wejściowe były wyłączone w niektórych instrukcjach. użyj [readonly]=truelub falsezamiast wyłączone.

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

1
Rozwiązanie przyjazne dla reakcji.
— John Deer,

1
To jest poprawne. Dla mnie [attr.disabled] = "wyłączone" działało tylko w jedną stronę, tzn. Wejście pozostawało początkowo wyłączone / włączone
— spiritworld

Bardzo dziękuję za to!
— Nazir

Nazirnie ma problemu
— 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
Jeśli umieścisz dziennik konsoli w metodzie isDisabled, wykonywane są setki dzienników konsoli. Jeśli w metodzie isDisabled występuje złożona logika, może to oznaczać problem. Nie jestem więc pewien, czy to dobre rozwiązanie.
— Téwa

1
Nie wprowadzaj dynamicznego sprawdzania do zmiennych Angular lub uzyskasz nieskończoną pętlę. Możesz użyć [disabled]="is_edit"bezpośrednio. Dlaczego isDisabled()funkcja?
— alex351

Zaktualizuj kod, aby bezpośrednio zmienić stan wejścia.
— Yoav Schniederman

7

Zakładam, że miałeś na myśli falsezamiast'false'

Ponadto, [disabled]oczekuje Boolean. Należy unikać zwracania pliku null.


4

Uwaga w odpowiedzi na komentarz Beltera na temat zaakceptowanej odpowiedzi fedtucka powyżej, ponieważ nie mam reputacji, aby dodawać komentarze.

Nie dotyczy to żadnego, o czym jestem świadomy, zgodnie z dokumentacją Mozilli

wyłączone oznacza prawdę lub fałsz

Gdy atrybut disabled jest obecny, element jest wyłączony niezależnie od wartości. Zobacz ten przykład

<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
to prawda i całkowicie prawdziwe dla czystego HTML, ale dla kątowego, musisz podać wartość logiczną dla niepełnosprawnych, szczególnie gdy robisz dwustronne wiązanie.
— Ifesinachi Bryan

4

Wolę to rozwiązanie

W pliku HTML:

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

W pliku TS:

dynamicVariable = false; // true based on your condition 

3

To, czego szukasz, jest wyłączone = „prawda” . Oto przykład:

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

6
To jest niepoprawne, disabledatrybut HTML i DOM jest „atrybutem logicznym”, co oznacza, że ​​należy podać tylko nazwę atrybutu - lub jego wartość musi być równa disabled, np. disabled="disabled" - it does not recognize the values of True` lub false- więc disabled="false"nadal spowoduje wyłączenie elementu.
— Dai

2

Próbny

marka is_edittypu boolean.

<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

Wyłącz TextBox w Angular 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

A także jeśli pole / przycisk wprowadzania danych musi pozostać wyłączone, to po prostu <button disabled>lub <input disabled>działa.


0

Wyłączone Selectw kątowej 9.

jedna rzecz, pamiętaj o wyłączonej pracy z booleanwartościami w tym przykładzie, używam (change)zdarzenia z selectopcją, jeśli kraj nie jest wybrany, region zostanie wyłączony.

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

można używać po prostu jak

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

Mam to w ten sposób. więc wolę.


To nie ustawia atrybutu disabled dynamicznie
— Benjineer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.