这是我在视图中选择的 ui:
<ui-select ng-model="selectedLabel.selected" ng-disabled="fetchingLabels || working">
<ui-select-match placeholder="">{{$select.selected.code}}</ui-select-match>
<ui-select-choices repeat="label in labels| filterBy: ['name', 'code']: $select.search">
<div ng-bind-html="label.code | highlight: $select.search"></div>
<small ng-bind-html="label.name | highlight: $select.search"></small>
</ui-select-choices>
</ui-select>
这是我的控制器中的相关代码:
$scope.labels = [];
$scope.selectedLabel = {};
$scope.selectedLabel.selected = $scope.passedLabel; // This is an object passed
// from the previous controller.
// The scope comes with it.
$scope.fetchLabels(); // This fetches the labels from the server
// and puts them in $scope.labels
从服务器带来的标签理论上是这样的:
[{'labelId': 20, 'code': 'L20', 'name': 'some label'},
{'labelId': 21, 'code': 'L21', 'name': 'other label'}, ...]
并且从外部传递的标签“passedLabel”在理论上也类似于其中之一$scope.labels
,例如:
passedLabel = {'labelId': 21, 'code': 'L21', 'name': 'other label'}
...我从理论上说是因为,从经验上看,我看到它们是不同的,因为 Angular 给它们添加了一些东西(例如$$hashKey
,或__proto__
)。
因此,由于这种差异,$scope.selectedLabel.selected = $scope.passedLabel
与 ui-select 中的相应项目不匹配(它们不是同一个对象),因此,结果就是这种行为:
如何正确设置初始选择?有没有办法可以使用 id 而不是对象比较?我想避免for
这样:
for (i=0; i<$scope.labels; i++) {
if ($scope.labels[i].labelId == $scope.passedLabel.labelId) {
$scope.selectedLabel.selected = $scope.labels[i]
}
}
我很确定它会按预期工作,但我必须for
在 ajax 返回后调用它......而且我还有其他 ui-selects