我有一种方法来获取下拉列表中所选值的文本,而不是以反应形式获取值?
我的脚本如下:
<form [formGroup]="formGroup" formArrayName="test">
<ng-container matColumnDef="fr" formArrayName="test">
<th mat-header-cell *matHeaderCellDef> Family Rel. </th>
<td mat-cell *matCellDef="let element; let i = index;">
<div [formGroupName]="i">
<mat-form-field color="warn" >
<mat-label>Family Relation</mat-label>
<mat-select (selectionChange)="onChange(element, i)" id="family_relation" formControlName="fr" placeholder="Family Relation">
<mat-option *ngFor="let familyRelation of familyRelationArray;" [value]="familyRelation.family_relation_id">
{{familyRelation.family_relation_type}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
</td>
</ng-container>
</form>
在更改选择(selectionChange="onChange(element, i)")
上,我需要同时获取所选的值和其文本。
onChange(data, i)
{
let group = (<FormArray>this.formGroup.get('test')).at(i).value;
let newFr = group['fr'];
console.log('Value: '+newFr);
}
其中数据是所选行,i
是所选表单数组的索引。
我尝试使用旧的javascript方法:
<HTMLSelectElement>document.getElementById().text
但这给了我一个错误:
[ts]类型“ HTMLElement”上不存在属性“文本”。 [2339]
编辑
我尝试过:
@ViewChild('familyRelation') familyRelation;
并且:
<mat-select #familyRelation (selectionChange)="onChange(element, i)" id="family_relation" formControlName="fr" placeholder="Family Relation">
<mat-option *ngFor="let familyRelation of familyRelationArray;" [value]="familyRelation.family_relation_id">
{{familyRelation.family_relation_type}}
</mat-option>
</mat-select>
安慰后:
答案 0 :(得分:1)
首先,从表单控件获取值。然后通过遍历数组获得与值相关的项目。最后从项目
中获取文本onChange(data, i)
{
let text = formGroup.get("fr").value;
let newFr =this.familyRelationArray.find((item) => item.family_relation_id === text)
if(newFr){
console.log('text: '+newFr.family_relation_type);
}
}
答案 1 :(得分:0)
根据您的评论,您需要一种通用的方式来访问html元素。 Angular提供了easy way to do so
<mat-select #selectFamilyRelation
(selectionChange)="onChange()"
id="family_relation"
formControlName="fr"
placeholder="Family Relation">
<mat-option *ngFor="let familyRelation of familyRelationArray;"
[value]="familyRelation.family_relation_id">
{{familyRelation.family_relation_type}}
</mat-option>
</mat-select>
在组件内部:
创建一个class属性:
@ViewChild('selectFamilyRelation') familyRelation;
然后获取所选选项的文本:
onChange() {
const selectedOptionText = this.familyRelation._elementRef.nativeElement.innerText;
// ...
}