angular - 使用 mat-select 设置默认值:我应该使用 ngModel 还是 value
问题描述
目标:尝试为下拉菜单设置默认值(基于条件)
问题:当我删除 ngModel 时它不起作用。但是,如果我将其添加回去并删除值,它也不起作用。我认为 ngModel 应该是影响默认值的功能?
我试过的:
- 我回去查看了有关数据绑定、模板驱动和反应式表单的信息
- 我查找了有关 ngModel 的文档。价值不是很清楚
- 我尝试了对 mat-select 和 mat-option 的许多修改
我的理解是 [] 做了属性绑定,并允许来自 Typescript 的信息显示在网页(html)上。[()] 允许两种方式绑定。和 [ngModel] 让您从 TypeScript 中获取值并显示它。那么如果你可以使用 ngModel 进行 2 路绑定,那么 value 的目的是什么?
(这里的上下文是一个具有表单的应用程序,在数据库的下拉列表中显示一个值,但允许用户更改该值)。
下面是我的代码的最小示例:
HTML:
<mat-select [(ngModel)]="myRelationship" placeholder="Relationship to You" formControlName="relationship" required>
<mat-option *ngFor="let rel of relations" [value]="rel.value" (click)="selectRelationship(rel.value)">
{{ rel.viewValue }}
</mat-option>
</mat-select>
如果您的 javascript 对象数组具有相同的值但不同的 viewValues,则默认值不起作用,例如:
relationships = [
{value: Cousin, viewValue: Primo },
{value: Cousin, viewValue: Prima } ]
条件逻辑
if (this.individual.Relationship.startsWith('Cousin')) {
if (this.individual.Gender == 'M') {
this.relations[indexCousin].viewValue = "Primo";
this.relations.push({ value: 'Cousin', viewValue: "Prima" });
}
}
解决方案
ngModel
您不应该formControlName
在mat-select
. 其中之一就足够了。要设置默认值,您可以使用元素[value]
上的属性。mat-select
您目前仅在mat-option
.
<mat-option *ngFor="let rel of relations" [value]="rel.value" (click)="selectRelationship(rel.value)">
{{ rel.viewValue }}
</mat-option>
value
此模板的目的是设置选择选项value
时mat-select
将具有的内容。上有一些output
事件mat-select
将为您提供所选选项的值。例如selectionChange
。
每个都有一个 value 属性,可用于设置用户选择此选项时将选择的值。的内容是向用户显示的内容。
如果要设置默认value
值mat-select
。您可以使用[value]
,但这会在mat-select
组件上进行。
<mat-select [value]="myRelationship" placeholder="Relationship to You" required>
<mat-option *ngFor="let rel of relations" [value]="rel.value" (click)="selectRelationship(rel.value)">
{{ rel.viewValue }}
</mat-option>
</mat-select>
请注意formControlName
已删除
您可以使用,formControlName
但您必须确保formControl
在您的组件中给定了一个值。
<mat-select placeholder="Relationship to You" formControlName="relationship" required>
<mat-option *ngFor="let rel of relations" [value]="rel.value" (click)="selectRelationship(rel.value)">
{{ rel.viewValue }}
</mat-option>
</mat-select>
设置值的方式formControl
将取决于它在组件中的实例化方式。
推荐阅读
- python - 附加两个基于 bng Easting / Northing 的数据框
- javascript - 从二维数组创建可编辑的 HTML 表格
- python - Chrome/Firefox 在新选项卡中打开 PDF 并且不以无头模式保存 (Selenium+Python)
- java - Quartz cron 表达式在星期六的不同时间运行
- sql-server - 有没有办法检查对象是 SQL Server 中的表还是视图?
- python - 检查日期是否与另一个崩溃
- reactjs - How do I hide the codes that appear in the sourcemap in the react application?
- amazon-web-services - 使用 AWS 证书管理器请求证书时出错
- android - 如何使亚马逊应用内购买 (IAP) 2.0 与 Android R8 一起使用
- machine-learning - 是否可以使用 Vision coreML 执行批量预测