Angular2'de bir giriş nasıl devre dışı bırakılır


123

Devre is_edit = truedışı bırakılacak ...

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

Sadece trueveya temelli bir girişi devre dışı bırakmak istiyorum false.

Aşağıdakileri denedim:

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

10
Bu soruyu zaten sordunuz ve zaten bir cevabınız vardı, ancak sonra soruyu sildiniz. Yine, hataları fark etmek için tarayıcı konsolunuzu açın, düzeltin (yani adı kullanın ve formControlName kullanmayın) ve ardından çalışır: plnkr.co/edit/al2IkGkaZKpdLKKTfvKh?p=preview
JB Nizet

Buradaki asıl sorun, şablon tabanlı formları reaktif formlarla karıştırmanızdır. İkisini birden değil, birini veya diğerini kullanın. @ AJT_82 doğru cevaba sahiptir.
adam0101

Yanıtlar:


318

attr.disabledBunun yerine kullanmayı deneyindisabled

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

5
Attr değerini öğeye EKLEMEMEK için attr değerini null olarak ayarlamak - bir hack gibi görünür - ama aslında işe yarıyor ve hatta geriye dönüp bakıldığında mantıklı geliyor.
c69

2
disabledeşittir trueveyafalse
Belter

18
Gerçekten işe yarayan bir yanıt için teşekkür ederiz! Öyleyse neden attr.disabledçalıştığı zaman disabledçalışmıyor?
Dylanthepiguy

5
Bu işe yarasa da, şablon tabanlı formları reaktif formlarla karıştırmanın gerçek sorununu çözmeyen bir hack'tir. OP, ikisini birden değil, birini veya diğerini kullanmalıdır.
adam0101

2
<input [attr.disabled] = "devre dışı || null" /> Ayrıca çalışmayı düşünüyorum
Francesco

41

Sanırım sorunu çözdüm, bu girdi alanı reaktif bir formun (?) Parçası, çünkü siz dahil ettiniz formControlName. Bu, ile giriş alanını devre dışı bırakarak yapmaya çalıştığınız şeyin çalışmadığı anlamına gelir is_edit, örneğin, [disabled]="is_edit"başka durumlarda işe yarayacak olan girişiminiz . Formunuzla bunun gibi bir şey yapmanız gerekiyor:

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

ve is_edittamamen kaybedersiniz .

giriş alanının varsayılan olarak devre dışı bırakılmasını istiyorsanız, form denetimini şu şekilde ayarlamanız gerekir:

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

İşte bir dalgıç


30

Bunu basitçe yapabilirsin

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

1
Bu işe yarasa da, "yanlış" ın denetimi etkinleştireceğini öne sürüyor ki, devre dışı bırakılmış özniteliğin varlığı, denetimi devre dışı bırakan şeydir, değer değil.
Mecaveli

@Mecaveli, [devre dışı] 'nın yanlış olarak ayarlanması aslında kontrolü etkinleştirir. <input [disabled] = "false" id = "name" type = "text">, giriş alanını etkinleştirir. Açısal uygulamanızı kontrol edebilirsiniz.
Ifesinachi Bryan

1
Sadece burada kendimi düzeltmek için: Öğrendiğim gibi, [devre dışı] aslında [attr.disabled] gibi "devre dışı bırakılmış" html öznitelik değerini kontrol etmez. Bu nedenle, [devre dışı] = "yanlış" çalışır, ancak html özniteliği "devre dışı bırakma" değeri olarak "yanlış" çalışmaz.
Mecaveli

6
Sonuç olarak, aslında editörünüzü kullanmalı ve bir karşı nokta getirmeden önce denemelisiniz.
Ifesinachi Bryan

Nitekim, olumsuz oy verdiğim için özür dilerim maalesef bunu şimdi geri alamazsınız. Yıllarca [özürlü] kötüye kullanıyordu (daha doğrusu pek düşünmüyordu) düşünmek [engelli]
demek

26

Bazı ifadelerde girişin devre dışı bırakılmasını istiyorsanız. kullanmak [readonly]=trueveya falseyerine engelli.

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

1
Reaktif dostu çözüm.
John Deer

1
Doğru. Benim için [attr.disabled] = "devre dışı" yalnızca tek yönlü çalıştı, yani giriş ilk devre dışı / etkin durumda kaldı
spiritworld

Bunun için çok teşekkür ederim!
Nazir

Nazirsorun değil
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
Konsol günlüğünü isDisabled yöntemine koyarsanız, yüzlerce konsol günlüğü yürütülür. İsDisabled yönteminde karmaşık bir mantık varsa, bu bir sorun olabilir. Bu yüzden bunun iyi bir çözüm olduğundan emin değilim.
Téwa

1
Açısal değişkenlere dinamik kontrol koymayın yoksa sonsuz bir döngü elde edersiniz. [disabled]="is_edit"Doğrudan kullanabilirsiniz . Neden isDisabled()işlev?
alex351

giriş durumunu doğrudan değiştirmek için kodu güncelleyin.
Yoav Schniederman

7

Bunun falseyerine demek istediğini varsayıyorum'false'

Ayrıca, [disabled]bir Boolean. A döndürmekten kaçınmalısınız null.


4

Belter'in fedtuck'ın yukarıdaki kabul edilen cevabı hakkındaki yorumuna cevaben bir not , çünkü yorum ekleme itibarım yok.

Bu Mozilla belgelerine uygun olarak bildiğim hiçbiri için doğru değil

devre dışı, doğru veya yanlışa eşittir

Devre dışı bırakılmış öznitelik mevcut olduğunda öğe, değerine bakılmaksızın devre dışı bırakılır. Bu örneğe bakın

<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
bu, saf Html için doğrudur ve tamamen doğrudur, ancak açısal için, özellikle iki yönlü bağlama yaparken engelliler için bir boole değeri sağlamalısınız.
Ifesinachi Bryan

4

Bu çözümü tercih ederim

HTML dosyasında:

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

TS dosyasında:

dynamicVariable = false; // true based on your condition 

3

Aradığınız şey devre dışı = "doğru" . İşte bir örnek:

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

6
Bu yanlıştır, HTML ve DOM disabledözniteliği bir "boole özniteliğidir", bu da yalnızca öznitelik adının belirtilmesi gerektiği veya değerinin eşit olması gerektiği anlamına gelir disabled, örneğin disabled="disabled" - it does not recognize the values of true` veya false- bu disabled="false"nedenle, öğenin devre dışı bırakılmasına neden olur.
Dai

2

gösteri

is_editboole türü yapmak .

<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

Angular 7'de TextBox'ı devre dışı bırakın

<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

Ayrıca giriş kutusu / düğmesinin devre dışı kalması gerekiyorsa, o zaman basitçe <button disabled>veya <input disabled>çalışır.


0

Devre dışı Selectaçısal 9'da.

Unutmayın ki booleanbu örnekte değerlerle çalışmayı devre dışı bırakarak , ülke seçilmezse seçeneği (change)ile olayı kullanıyorum selectbölge devre dışı bırakılacaktır.

find.component.ts dosyası

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

basitçe kullanabilir

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

Ben böyle anladım. bu yüzden tercih ederim.


Bu, devre dışı bırakılan özniteliği dinamik olarak
ayarlamıyor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.