对角度选择使用较弱的等式测试

时间:2014-05-29 21:26:34

标签: javascript angularjs

很多建议告诉我这样做:

// 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?

1 个答案:

答案 0 :(得分:3)

是的,但它需要使用外部库或您自己的一些脚本。您只需要一个查找函数,它将获取您的键/值对(例如您在代码示例中显示它)并从数组中返回一个项目。

以下示例在Underscore中使用findWhere,其中包含:

  

查看列表并返回与所有匹配的第一个值   属性中列出的键值对。

$scope.selectedItem = _.findWhere($scope.items, {id: 2, name: 'Bar'});

使用.findWhere,您还可以搜索数组项中包含的键/值对的子集,如下所示:

$scope.selectedItem = _.findWhere($scope.items, {id: 2});

Demo