【发布时间】:2017-10-23 18:44:37
【问题描述】:
以这种方式在模板中定义选择输入的选项时:
<select formControlName="gender">
<option *ngFor="let g of genders" [ngValue]="g.code">{{g.name}}</option>
</select>
控件被渲染:
<select class="ng-pristine ng-valid ng-touched" formcontrolname="gender" ng-reflect-name="gender">
<option ng-reflect-ng-value="0: 71011">Dona</option>
<option ng-reflect-ng-value="1: 71012">Home</option>
<option ng-reflect-ng-value="2: 71013">Desconegut</option>
</select>
效果很好,对于选定的选项,值从 FormGroup 中恢复为数字。
现在我正在尝试开发一个组件,它可以加载具有相同结构(代码/名称)的任何参数列表,为此,我已经定义了该组件:
@Component({
selector: 'select[selectLoader]',
template: `
<option *ngFor="let parameter of parametersArray" [ngValue]="parameter.code">{{parameter.name}}</option> `
})
在组件的内部代码中,参数列表从属性family 的值正确加载(提供参数族的代码)。不同之处在于,在这两种情况下,代码都是一个数字,在这种情况下,组件会被渲染:
<select class="c3 ng-pristine ng-valid ng-touched" family="GENDER" formcontrolname="gender" selectloader="" ng-reflect-name="gender" ng-reflect-family="GENDER">
<option ng-reflect-ng-value="71011">Dona</option>
<option ng-reflect-ng-value="71012">Home</option>
<option ng-reflect-ng-value="71013">Desconegut</option>
</select>
在这种情况下,FormGroup 返回的值是字符串,而不是数字,因此尽管选项的模板部分相同,但呈现方式不同,并且返回的值不对应ngValue 类型。
在这两种情况下,ngValue 定义为 [ngValue]="parameter.code" 是 code 一个数字,但在第二种情况下被视为字符串。
为什么会有不同,我该怎么做?
更新:这是example in stakblitz。我发现它甚至完全忽略了 ngValue 并将内容文本作为值。
【问题讨论】:
-
我认为问题出在代码的其他部分。如果您可以创建一个 stackblitz.com 复制示例,则很容易进行调查。
-
其余代码只是加载了参数列表,在这两种情况下
code都是一个数字。 -
"谈话很便宜。给我看代码。"莱纳斯·托瓦兹 (2000)
-
现在你有一个例子......
标签: angular html-select angular-components