วิธีปิดการใช้งานอินพุตในเชิงมุม 2


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">

ผมเพียงแค่ต้องการที่จะปิดการใช้งานการป้อนข้อมูลที่อยู่บนพื้นฐานหรือtruefalse

ฉันพยายามทำตาม:

[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

คำตอบ:


318

ลองใช้attr.disabledแทนdisabled

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

5
การตั้งค่า attr เป็น null เพื่อที่จะไม่เพิ่ม attr ให้กับองค์ประกอบ - ดูเหมือนแฮ็ก - แต่มันใช้งานได้จริงและยังทำให้เข้าใจได้ในแง่ของการมองย้อนกลับ
c69

2
disabledเท่ากับtrueหรือfalse
Belter

18
ขอบคุณสำหรับคำตอบที่ใช้งานได้จริง! เหตุใดจึงattr.disabledทำงานเมื่อdisabledไม่ได้ผล?
Dylanthepiguy

5
แม้ว่าวิธีนี้จะใช้งานได้ แต่เป็นการแฮ็กที่ไม่ได้แก้ไขปัญหาที่แท้จริงของการผสมแบบฟอร์มที่ใช้เทมเพลตกับรูปแบบปฏิกิริยา OP ควรใช้อย่างใดอย่างหนึ่งไม่ใช่ทั้งสองอย่าง
adam0101

2
<input [attr.disabled] = "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

@Mecaveli การตั้งค่า [ปิดการใช้งาน] เป็นเท็จทำให้สามารถควบคุมได้จริง <input [disabled] = "false" id = "name" type = "text"> ทำให้ช่องป้อนข้อมูลเปิดใช้งาน คุณสามารถตรวจสอบแอปพลิเคชันเชิงมุมของคุณได้
Ifesinachi Bryan

1
เพื่อแก้ไขตัวเองที่นี่: ดังที่ฉันได้เรียนรู้ว่า [ปิดการใช้งาน] ไม่ได้ควบคุมค่าแอตทริบิวต์ html ที่ "ปิดใช้งาน" อย่างที่ [attr.disabled] จะทำได้ ด้วยเหตุนี้ [disabled] = "false" จะทำงานแม้ว่า "false" เป็นค่าสำหรับแอตทริบิวต์ html "ปิดการใช้งาน" จะไม่
Mecaveli

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
โซลูชันที่เป็นมิตรกับปฏิกิริยา
John Deer

1
นี่ถูกต้องแล้ว สำหรับฉัน [attr.disabled] = "disabled" ทำงานทางเดียวเท่านั้นเช่นอินพุตยังคงอยู่ในสถานะปิดใช้งาน / เปิดใช้งานเริ่มต้น
spiritworld

ขอบคุณมากสำหรับเรื่องนี้ !
Nazir

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 อาจเป็นปัญหาได้ ดังนั้นฉันไม่แน่ใจว่านี่เป็นทางออกที่ดี
Téwa

1
อย่าใส่การตรวจสอบแบบไดนามิกในตัวแปรเชิงมุมมิฉะนั้นคุณจะได้รับการวนซ้ำที่ไม่มีที่สิ้นสุด คุณสามารถใช้[disabled]="is_edit"โดยตรง ทำไมisDisabled()ฟังก์ชั่น?
alex351

อัปเดตรหัสเพื่อเปลี่ยนสถานะการป้อนข้อมูลโดยตรง
Yoav Schniederman

7

ฉันคิดว่าคุณหมายถึงfalseแทนที่จะเป็น'false'

นอกจากนี้ยัง[disabled]คาดหวังว่าไฟล์Boolean. คุณควรหลีกเลี่ยงการส่งคืนไฟล์null.


4

หมายเหตุเพื่อตอบกลับความคิดเห็นของ Belter เกี่ยวกับคำตอบที่ยอมรับของ 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 ที่บริสุทธิ์ แต่สำหรับเชิงมุมคุณต้องระบุค่าบูลีนสำหรับปิดใช้งานโดยเฉพาะเมื่อคุณทำการผูกสองทาง
Ifesinachi Bryan

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"จะยังคงทำให้องค์ประกอบถูกปิดใช้งาน
Dai


2

ปิดการใช้งาน TextBox ใน 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

และยังถ้ากล่องใส่ปุ่ม / มีจะยังคงปิดการใช้งานแล้วก็ <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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.