【发布时间】:2016-12-08 22:04:37
【问题描述】:
如果用户从另一个下拉列表更改他们的选择(这也会隐藏有问题的选择输入),我想从表单上的选择输入中清除值(反应式)。理想情况下,我想能够在模板中内联执行此操作,而不是向控制器添加代码。我的一个想法是尝试在绑定我的选项的 [ngValue] 上使用三元运算符。
上下文代码:
<form [formGroup]="myForm">
<div>
<label for="constrainingDropdown">Constraining Dropdown</label>
<div>
<select name="constrainingDropdown" formControlName="constrainingDropdown">
<option disabled value="">Select an Option</option>
<option *ngFor="let opt of constraints" [ngValue]="opt.code">{{opt.value}}</option>
</select>
</div>
<div [hidden]="myForm.controls.constrainingDropdown.value !== 'OPT1'">
<div>
<select name="constrainingDropdown" formControlName="myDropdown">
<option disabled value="">Select an Option</option>
RELEVANT ==> <option *ngFor="let myOpt of options" [ngValue]="{myForm.controls.constrainingDropdown.value !== 'OPT1' ? '' : myOpt.code}">{{myOpt.value}}</option>
</select>
</div>
</div>
</div>
</form>
这会导致某种模板解析错误:是否可以在 ngValue 中使用三元运算符?还是我需要另一种解决方案?同样,不要为这个简单的逻辑在控制器中编写代码。
当前方法:订阅表单更改事件
this.myForm.controls['constrainingDropdown'].valueChanges.subscribe (
(opt: string) => {
if(opt === 'OPT1') {
this.myForm.controls.myDropdown.patchValue('');
}
}
)
【问题讨论】:
-
你能不能把
[ngValue]="{myForm.controls.constrainingDropdown.value !== 'OPT1' ? '' : myOpt.code}"改成[value]="myForm.controls.constrainingDropdown.value !== 'OPT1' ? '' : myOpt.code" -
我从未见过
[ngValue]在野外被使用,我不确定你为什么要用花括号将值括起来
标签: angular ternary-operator angular2-forms