【发布时间】:2016-06-17 07:09:10
【问题描述】:
这是我的 json 对象:
$scope.todos = [{
name: 'angular',
field: ['a', 'b', 'c', 'd'],
id: 1
}, {
name: 'asd',
field: ['a', 'b', 'c', 'd', 'e'],
id: 2
}];
我给选择为:
<select ng-model="dashboard.type" ng-options="item as item.name for item in todos track by item.name"></select>
Now when an option is chosen i want another select which iterates upon ngModel of previous select.下一个看起来像:
<select ng-model="dashboard.label" ng-options="item as item for item in dashboard.type.field"></select>
当我手动选择选项时它工作正常但是当它们是我脚本中dashboard.type中的值(例如:$scope.dashboard.type.name = 'qwe')时,它使用track by选择选项并将其保存在dashboard.type中,而不是保存整个对象,它只是保存track by 选项中使用的值。
dashboard.type 的值:
- 当我手动选择选项时:
{"name":"qwe","field":["a","b","c","d","f"],"id":3} - 使用跟踪方式时:
{"name":"qwe"}
注意:我不能使用 track by item 。它必须是对象item 的属性。可以是name 或id。
这是plnkr。
编辑:
正如许多人所指出的,我想澄清一下,我不能将对象初始化为todos 列表的任何值。这是因为dashboard.type.name 的值每次都会不同,而todos 列表的对象数量从 10 到 100 不等。现在我必须迭代列表todos 检查todos[index].name==someName 是否并分配相关对象。我正在积极尝试避免这种情况(因为必须有更好的方法)。
注意:我也尝试使用ng-change 并将实际对象分配给dashboard.type.name,但这仅在手动选择选项时有效,这似乎已经正常工作。使用track by时不分配对象。
重要提示: $scope.dashboard.type.name = 'qwe' 只是一个示例。每次加载页面时,$scope.dashboard.type.name 的值可能会发生变化。
PS:我也应该早点提到这一点。对不起,我的错!
【问题讨论】:
-
只需像这样更改您的初始化 $scope.dashboard={}; $scope.dashboard.type ={} $scope.dashboard.type ={ name: 'qwe', field: ['a', 'b', 'c', 'd', 'f'], id: 3 } ;
-
如果我可以在不遍历
todos列表的情况下完成最后一部分,那么它会起作用。 PS:我已经更新了问题,请再次检查。 -
在这种情况下调用 ng-init 上的函数并根据您想要的值在那里初始化
-
试过了,不行,可以给我看一下吗??
标签: angularjs angular-ngmodel ng-options angularjs-track-by