Angular 在 ng-options 的值之前注入 "string:"
Angular injects "string:" before value in ng-options
我有一个用 HTML select 元素定义的 ng-options
列表,例如:
<select
required="required"
ng-model="vm.selectedOption"
ng-options="item.name as item.label for item in vm.options">
<option value="">Select an option</option>
</select>
然而,这会导致以下结果 HTML:
<option value="string:VALUE" label="Option Name">Option Name</option>
我正在使用 Angular 版本 1.4.8,有没有人知道如何解决 string:
问题,或者至少可以向我解释为什么会发生这种情况?
vm.options
数组如下所示:
[
{
"name": "INFILL_AUTOMATIC",
"label": "Automatic"
},
{
"name": "INFILL_GRID",
"label": "Grid"
}
]
//编辑:
记录时 vm.selectedOption
我只看到正确的值。所以 ng-model
实际上具有正确的值。但是为什么Angular给了默认的value
然后这个前缀,是不是用这个前缀给ng-model
定义了"type"什么的?
这是工作Plunker
和 JS:
<select ng-model="template" ng-options="c as (c.label + ' - ' + c.name) for c in options">
此行为记录在 angular 更新日志中,作为 Angular 1.4-beta.0 的重大更改。 https://github.com/angular/angular.js/blob/master/CHANGELOG.md#breaking-changes-17
基本上,为了在 ng-options
中保留重复检查,如果将原始值列表提供给 ng-options
,则值的类型会添加到值的前面,以创建唯一的哈希要跟踪的键(这与 angular 的早期版本不同,后者将通过索引或集合中项目的键进行跟踪)。
实际上,这应该不会影响 ng-options
的大多数用法。如果保留下拉菜单的 value
参数对您很重要,您可以在 ng-options
中使用 track by
参数以提供用于重复跟踪的备用键。
请注意,这与 ng-repeat
不同,因为 ng-repeat
无法使用此方法生成代理键,因为它会影响重复元素的行为。因此,如果在没有 track by
子句的情况下将重复的列表传递给 ng-repeat
,ng-repeat
将产生错误并且不会呈现项目,其中 ng-options
能够呈现列表。
我有一个用 HTML select 元素定义的 ng-options
列表,例如:
<select
required="required"
ng-model="vm.selectedOption"
ng-options="item.name as item.label for item in vm.options">
<option value="">Select an option</option>
</select>
然而,这会导致以下结果 HTML:
<option value="string:VALUE" label="Option Name">Option Name</option>
我正在使用 Angular 版本 1.4.8,有没有人知道如何解决 string:
问题,或者至少可以向我解释为什么会发生这种情况?
vm.options
数组如下所示:
[
{
"name": "INFILL_AUTOMATIC",
"label": "Automatic"
},
{
"name": "INFILL_GRID",
"label": "Grid"
}
]
//编辑:
记录时 vm.selectedOption
我只看到正确的值。所以 ng-model
实际上具有正确的值。但是为什么Angular给了默认的value
然后这个前缀,是不是用这个前缀给ng-model
定义了"type"什么的?
这是工作Plunker
和 JS:
<select ng-model="template" ng-options="c as (c.label + ' - ' + c.name) for c in options">
此行为记录在 angular 更新日志中,作为 Angular 1.4-beta.0 的重大更改。 https://github.com/angular/angular.js/blob/master/CHANGELOG.md#breaking-changes-17
基本上,为了在 ng-options
中保留重复检查,如果将原始值列表提供给 ng-options
,则值的类型会添加到值的前面,以创建唯一的哈希要跟踪的键(这与 angular 的早期版本不同,后者将通过索引或集合中项目的键进行跟踪)。
实际上,这应该不会影响 ng-options
的大多数用法。如果保留下拉菜单的 value
参数对您很重要,您可以在 ng-options
中使用 track by
参数以提供用于重复跟踪的备用键。
请注意,这与 ng-repeat
不同,因为 ng-repeat
无法使用此方法生成代理键,因为它会影响重复元素的行为。因此,如果在没有 track by
子句的情况下将重复的列表传递给 ng-repeat
,ng-repeat
将产生错误并且不会呈现项目,其中 ng-options
能够呈现列表。