如何在Angular中提取用户通过mat选项(下拉列表)选择的对象的多个属性?
TLDR:下拉列表是对象的列表。不确定如何捕获所选对象的多个属性。 我目前的工作内容: 我有一个简单的下拉列表,显示通过API调用返回的obj的详细信息:如何在Angular中提取用户通过mat选项(下拉列表)选择的对象的多个属性?,angular,typescript,angular-material,dropdown,Angular,Typescript,Angular Material,Dropdown,TLDR:下拉列表是对象的列表。不确定如何捕获所选对象的多个属性。 我目前的工作内容: 我有一个简单的下拉列表,显示通过API调用返回的obj的详细信息: <mat-form-field class="testSection"> <mat-label>Available Test Results:</mat-label> <mat-select [(ngModel)]="testName" name="testName"
<mat-form-field class="testSection">
<mat-label>Available Test Results:</mat-label>
<mat-select [(ngModel)]="testName" name="testName" ngDefaultControl>
<mat-option *ngFor="let test of tests" [value]="test.testName">
{{ test.testName + test.testType + test.results + test.cohortId}}
</mat-option>
</mat-select>
</mat-form-field>
通过此操作,我确实能够根据用户在下拉列表中选择的内容(基于用户单击的特定test
)检索正确的test.testName
我需要什么:
我想进一步扩展它。假设我想同时test.name
和test.results
并将它们分配给变量testName
和testResults
,以便在进一步的API调用中使用。我该怎么做呢
我已尝试将[value]=“test.testName”
更改为[value]=“test.testName,test.testResults”
和[(ngModel)]=“testMap”
其中testMap在组件中定义为:testMap:Map
不幸的是,它什么也没做,我只捕获了test.testName 您可以简单地将
[(ngModel)]
变量绑定为整个测试对象。像这样:
<mat-form-field class="testSection">
<mat-label>Available Test Results:</mat-label>
<mat-select [(ngModel)]="testObject" name="testName" ngDefaultControl>
<mat-option *ngFor="let test of tests" [value]="test">
{{ test.testName + test.testType + test.results + test.cohortId}}
</mat-option>
</mat-select>
</mat-form-field>
可用测试结果:
{{test.testName+test.testType+test.results+test.cohortId}
我只更改了你代码的两部分
(1) 与[(ngModel)]
(2) [value]=“test.testName”
到[value]=“test”
您需要在组件中创建一个名为
testObject
的新成员变量,您可以使用该变量访问所选值的任何属性。谢谢您的回答,我应该如何定义testObject?我是否必须定义它以完全适合测试的类型和属性?在本例中,测试实际上只是一个java模型(在后端),具有属性testName、testResults。。。等等,我如何访问组件端的属性?为了补充我之前的评论,我创建了一个包含所有标识属性的新模型,现在它可以工作了。谢谢简单的方法是将它的类型定义为any,就像这样testObject:any代码>。但最好创建一个定义其所有属性的接口。在.ts
文件中,您可以简单地执行console.log(testObject.testName)
之类的操作。希望这能帮你解决问题。
<mat-form-field class="testSection">
<mat-label>Available Test Results:</mat-label>
<mat-select [(ngModel)]="testObject" name="testName" ngDefaultControl>
<mat-option *ngFor="let test of tests" [value]="test">
{{ test.testName + test.testType + test.results + test.cohortId}}
</mat-option>
</mat-select>
</mat-form-field>