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
