Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Angular中提取用户通过mat选项(下拉列表)选择的对象的多个属性?_Angular_Typescript_Angular Material_Dropdown - Fatal编程技术网

如何在Angular中提取用户通过mat选项(下拉列表)选择的对象的多个属性?

如何在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"

TLDR:下拉列表是对象的列表。不确定如何捕获所选对象的多个属性。

我目前的工作内容:

我有一个简单的下拉列表,显示通过API调用返回的obj的详细信息:

 <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>