ค้นหาเว็บไซต์

angular - วิธีเปิดใช้งานกล่องข้อความ Input หลังจากเลือกตัวเลือกกำหนดเองจากเมนูแบบเลื่อนลง?


ข้อมูล JSON

 loginValue: any[] = [
    { value: 'col-1', viewValue: 'facebook' },
    { value: 'col-2', viewValue: 'google' },
    { value: 'col-1', viewValue: 'Custom' }
  ];

HTML

<mat-form-field>
                    <mat-select placeholder="login Value" [disabled]="isDisabled1">
                      <mat-option *ngFor="let loginvalue of loginValue" [value]="loginvalue.value">
                        {{loginvalue.viewValue}}
                      </mat-option>
                    </mat-select>
                  </mat-form-field>

                  <div class="col-md-2">
                  <mat-form-field class="Custom">
                    <input matInput placeholder="Enter Custom Value" [disabled]="isDisabled1">
                  </mat-form-field>

ฉันมีค่าที่เลือกได้สามค่าในตัวเลือกแบบดรอปดาวน์ของฉันคือ facebook/ google/ Custom เมื่อฉันเลือก facebook หรือ Google กล่องข้อความต้องถูกปิดใช้งาน และเมื่อฉันคลิกที่ตัวเลือก Custom กล่องข้อความจะถูกเปิดใช้งาน ต้องเขียนตรรกะใน TypeScript อย่างไร หรือสามารถทำทุกอย่างได้ด้วย HTML เพียงอย่างเดียว? ขอบคุณล่วงหน้า!

คำตอบ #1

คุณสามารถลองใช้ Reactive Forms โดยการสมัครรับข้อมูลจากตัวเลือกที่คุณเลือกและจัดการเปิด/ปิดการใช้งานของตัวควบคุมอินพุตของคุณได้

TS:

changeState() {
    this.form.get('logintype').valueChanges
      .subscribe(res => {
        if (res === "Custom") { this.form.get('customInput').enable() }
        else { this.form.get('customInput').disable() }
      });
  }

เอชทีเอ็มแอล:

<form [formGroup]="form">
    <mat-form-field>
        <mat-select formControlName="logintype" placeholder="Select an option" (selectionChange)="changeState()">
            <mat-option *ngFor="let option of loginValue" [value]="option.viewValue">
                {{ option.viewValue }}
            </mat-option>
        </mat-select>
    </mat-form-field>

    <mat-form-field>
        <input matInput formControlName="customInput" type="text">
  </mat-form-field>

</form>

นี่คือตัวอย่างโค้ดบน StackBlitz

คำตอบ #2

สิ่งที่คุณต้องการคือการผูกโมเดลกับตัวแปร: [(ngModel)]="selectedValue" และใช้มันในแอตทริบิวต์ disabled จากนั้นตรวจสอบแอตทริบิวต์ disabled แบบนี้

  [disabled]="selectedValue.viewValue!=='Custom'"

โปรดทราบ: [value]="loginvalue"

ตรวจสอบตัวอย่างที่นี่ คุณจะพบตัวอย่าง ngmodel

นี่คือโค้ดที่ฉันได้เปลี่ยนแปลง

<mat-form-field>
    <mat-select placeholder="login Value" [(ngModel)]="selectedValue" [disabled]="isDisabled1">
        <mat-option *ngFor="let loginvalue of loginValue" [value]="loginvalue">
            {{loginvalue.viewValue}}
        </mat-option>
    </mat-select>
</mat-form-field>

<div class="col-md-2">
    <mat-form-field class="Custom">
        <input matInput placeholder="Enter Custom Value" [disabled]="selectedValue.viewValue!=='Custom'">
                  </mat-form-field>
  </div>

ตัวอย่าง Stackblitz