Angular 如何根据角度中的falsy值选择默认下拉选项?
在以下模板中,当基础Angular 如何根据角度中的falsy值选择默认下拉选项?,angular,angular2-template,Angular,Angular2 Template,在以下模板中,当基础model.militaryStatus属性为null时,“选择军事状态”选项将是选中的选项 选择军事状态 {{status.description}} 问题是,为了选择“选择军事状态”选项,ngModel-绑定字段需要精确地null-不是未定义的,不是空字符串,而是null。如果它们不完全相等,您将得到如下结果,其中没有选择的选项: 当基础组件属性具有任何falsy值时,是否有方法显示给定的选项?这样,无论API返回的是0、未定义的、null,还是空白字符串(所有常见
model.militaryStatus
属性为null
时,“选择军事状态”选项将是选中的选项
选择军事状态
{{status.description}}
问题是,为了选择“选择军事状态”选项,ngModel
-绑定字段需要精确地null
-不是未定义的,不是空字符串,而是null
。如果它们不完全相等,您将得到如下结果,其中没有选择的选项:
当基础组件属性具有任何falsy值时,是否有方法显示给定的选项
?这样,无论API返回的是0
、未定义的、null
,还是空白字符串(所有常见用例取决于场景),都将显示默认选项,而不会出现空白下拉框的中断用户体验
编辑:对于模板驱动的表单,我这样做了,得到了默认选择
在ts中分配model.militaryStatus=null
您可以根据型号的当前值调整第一个选项。军事状态
:
- 如果
model.militaryStatus
为falsy,则第一个选项的值为model.militaryStatus
- 如果
model.militaryStatus
为truthy,则第一个选项的值为null
选择军事状态
{{status.description}}
请参阅以获取演示。虽然这确实有效,但我试图避免必须这样做来“规范化”可能返回空字符串而不是null的API响应。必须手动将falsy值转换为null
s,使用类似于if(!!model.militaryStatus){model.militaryStatus=null;}
的方法,感觉不需要这样做。理想情况下,API响应应在适当时统一返回null
s,但修改API并不总是一个选项。@JacobStamm您是从API获得默认值还是将此值存储在客户端?在我的情况下,从API,但数据的来源不应如此matter@JacobStamm如果默认值将与其他选项值在同一数据中,我们将确保,默认值将是第一个。我们可以使用反应式表单,并通过FormGroup以编程方式设置默认值
<select [(ngModel)]="model.militaryStatus">
<option [ngValue]="!model.militaryStatus ? model.militaryStatus : null">Select Military Status</option>
<option *ngFor="let status of militaryStatuses" [value]="status.id">{{ status.description }}</option>
</select>