Cách tắt đầu vào trong angle2


123

Trong ts is_edit = trueđể vô hiệu hóa ...

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

Tôi chỉ đơn giản muốn vô hiệu hóa đầu vào dựa trên truehoặc false.

Tôi đã thử làm theo:

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

10
Bạn đã đặt câu hỏi này và đã có câu trả lời, nhưng sau đó đã xóa câu hỏi. Một lần nữa, mở giao diện điều khiển trình duyệt của bạn để thông báo lỗi, sửa chữa chúng (ví dụ: tên sử dụng và không formControlName), và sau đó, nó hoạt động: plnkr.co/edit/al2IkGkaZKpdLKKTfvKh?p=preview
JB Nizet

Vấn đề thực sự ở đây là bạn đang trộn các biểu mẫu dựa trên mẫu với các biểu mẫu phản ứng. Sử dụng cái này hoặc cái kia, không phải cả hai. @ AJT_82 có câu trả lời chính xác.
adam0101

Câu trả lời:


317

Hãy thử sử dụng attr.disabled, thay vìdisabled

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

5
Đặt giá trị attr thành null để KHÔNG thêm phần tử đính kèm - trông giống như một vụ hack - nhưng nó thực sự hoạt động và thậm chí tạo ra sự suy xét, trong một nhận thức muộn màng.
c69,

2
disabledbằng truehoặcfalse
Belter

18
Cảm ơn bạn vì một câu trả lời thực sự hiệu quả! Vậy tại sao attr.disabledhoạt động khi disabledkhông?
Dylanthepiguy

5
Mặc dù điều này hoạt động, nhưng đó là một cuộc tấn công không giải quyết được vấn đề thực sự của việc trộn các biểu mẫu dựa trên mẫu với các biểu mẫu phản ứng. OP nên sử dụng cái này hoặc cái kia, không phải cả hai.
adam0101

2
<input [attr.disabled] = "disable || null" /> Tôi nghĩ cũng có tác dụng
Francesco

41

Tôi nghĩ rằng tôi đã tìm ra vấn đề, trường đầu vào này là một phần của biểu mẫu phản ứng (?), Vì bạn đã bao gồm formControlName . Điều này có nghĩa là những gì bạn đang cố gắng thực hiện bằng cách tắt trường nhập bằng is_editkhông hoạt động, ví dụ như nỗ lực của bạn [disabled]="is_edit", trong các trường hợp khác sẽ hoạt động. Với biểu mẫu của bạn, bạn cần làm như sau:

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

và mất is_edithoàn toàn.

nếu bạn muốn trường nhập liệu bị tắt theo mặc định, bạn cần đặt điều khiển biểu mẫu là:

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

Đây là một plunker


30

Bạn chỉ có thể làm điều này

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

1
Trong khi điều này hoạt động, nó gợi ý rằng "false" sẽ kích hoạt điều khiển, điều này không kích hoạt điều khiển vì sự hiện diện của thuộc tính bị vô hiệu hóa là thứ đã làm mất điều khiển, không phải giá trị.
Mecaveli

@Mecaveli, việc đặt [bị vô hiệu hóa] thành sai thực sự cho phép điều khiển. <input [Disable] = "false" id = "name" type = "text"> bật trường nhập liệu. Bạn có thể kiểm tra ứng dụng góc cạnh của mình.
Ifesinachi Bryan

1
Chỉ để sửa lại bản thân tôi ở đây: Như tôi đã biết, [khuyết tật] không thực sự kiểm soát giá trị thuộc tính html "bị vô hiệu hóa" như [attr.disabled] sẽ làm. Vì vậy, [disable] = "false" hoạt động mặc dù "false" làm giá trị cho thuộc tính html "disable" thì không.
Mecaveli

6
Vì vậy, trên thực tế, bạn thực sự nên sử dụng trình chỉnh sửa của mình và dùng thử trước khi đưa ra điểm phản đối.
Ifesinachi Bryan

Thật vậy, rất tiếc vì đã phản đối, không thể hoàn tác ngay bây giờ. Đã lợi dụng [attr.disabled] trong nhiều năm suy nghĩ (hay đúng hơn là không có nhiều suy nghĩ) Nó rất tương đương với [tắt] ...
Mecaveli

26

Nếu bạn muốn vô hiệu hóa đầu vào trên một số câu lệnh. sử dụng [readonly]=truehoặc falsethay vì bị vô hiệu hóa.

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

1
Giải pháp thân thiện với phản ứng.
John Deer

1
Chính xác. Đối với tôi [attr.disabled] = "bị vô hiệu hóa" chỉ hoạt động một chiều tức là đầu vào vẫn ở trạng thái tắt / bật ban đầu
Spiritworld

Cám ơn bạn rất nhiều về điều này !
Nazir

Nazirkhông thành vấn đề
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
Nếu bạn đặt bảng điều khiển log trong phương thức isDisabled, có hàng trăm bảng điều khiển được thực thi. Nếu có một logic phức tạp trong phương thức isDisabled, nó có thể là một vấn đề. Vì vậy, tôi không chắc đây là một giải pháp tốt.
Téwa

1
Không đặt kiểm tra động vào các biến Angular nếu không bạn sẽ nhận được một vòng lặp vô hạn. Bạn có thể sử dụng [disabled]="is_edit"trực tiếp. Tại sao lại là isDisabled()chức năng?
alex351

cập nhật mã để thay đổi trạng thái đầu vào trực tiếp.
Yoav Schniederman

7

Tôi đoán bạn có ý falsethay vì'false'

Ngoài ra, [disabled]đang mong đợi a Boolean. Bạn nên tránh trả lại a null.


4

Một ghi chú phản hồi nhận xét của Belter về câu trả lời được chấp nhận của fedtuck ở trên, vì tôi không có uy tín để thêm nhận xét.

Điều này không đúng với bất kỳ điều gì tôi biết, theo tài liệu của Mozilla

bị vô hiệu hóa bằng đúng hoặc sai

Khi thuộc tính bị vô hiệu hóa hiện diện, phần tử bị vô hiệu hóa bất kể giá trị. Xem ví dụ này

<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
điều đó đúng và hoàn toàn đúng với Html thuần túy, nhưng đối với dạng góc, bạn phải cung cấp giá trị boolean cho người bị vô hiệu hóa, đặc biệt khi bạn đang thực hiện liên kết hai chiều.
Ifesinachi Bryan

4

Tôi thích giải pháp này hơn

Trong tệp HTML:

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

Trong tệp TS:

dynamicVariable = false; // true based on your condition 

3

Những gì bạn đang tìm kiếm bị vô hiệu hóa = "true" . Đây là một ví dụ:

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

6
Điều này không chính xác, disabledthuộc tính HTML và DOM là "thuộc tính boolean" có nghĩa là chỉ tên thuộc tính cần được chỉ định - hoặc giá trị của nó phải bằng disabled, ví dụ: disabled="disabled" - it does not recognize the values of true` hoặc false- như vậy disabled="false"sẽ vẫn khiến phần tử bị vô hiệu hóa.
Đài

2

Bản giới thiệu

làm is_editbằng kiểu 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

Tắt TextBox trong 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

Và cũng có thể nếu hộp / nút đầu vào vẫn bị vô hiệu hóa, thì đơn giản <button disabled>hoặc <input disabled>hoạt động.


0

Đã tắt Selectở góc 9.

một điều hãy nhớ rằng công việc bị vô hiệu hóa với booleancác giá trị trong ví dụ này, tôi đang sử dụng (change)sự kiện với selecttùy chọn nếu quốc gia không được chọn, khu vực sẽ bị vô hiệu hóa.

tệp 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

có thể sử dụng đơn giản như

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

Tôi đã hiểu nó như thế này. vì vậy tôi thích hơn.


Đây không phải là thiết lập động thuộc tính bị vô hiệu hóa
Benjineer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.