很多建议告诉我这样做:
// in js
$scope.items = [
{ id: 1, name: 'Foo'},
{ id: 2, name: 'Bar'}];
// in html
<select ng-model="selectedItem"
ng-options="item as item.name for item in items"></select>
这很好用。这也很好:
$scope.selectedItem = $scope.items[1];
select将初始化为Bar对象。
但这不起作用:
$scope.selectedItem = { id: 2, name: 'Bar'};
选择控件未初始化为Bar对象(我认为可以理解)。 selectedItem等效于Bar对象,但不等于它。我在应用程序中遇到此问题,其中解析是后端。 selectedItem是从一个对象到另一个对象的指针,并且这些项是目标类中的所有(少数)对象。我在两个不同的查询中得到了这些。
有没有办法操纵角度以便我仍然选择一个对象,但是使用自定义相等测试,比如对象id?
答案 0 :(得分:3)
是的,但它需要使用外部库或您自己的一些脚本。您只需要一个查找函数,它将获取您的键/值对(例如您在代码示例中显示它)并从数组中返回一个项目。
以下示例在Underscore中使用findWhere
,其中包含:
查看列表并返回与所有匹配的第一个值 属性中列出的键值对。
$scope.selectedItem = _.findWhere($scope.items, {id: 2, name: 'Bar'});
使用.findWhere,您还可以搜索数组项中包含的键/值对的子集,如下所示:
$scope.selectedItem = _.findWhere($scope.items, {id: 2});