2015-12-09 25 views
1

我在项目中使用了Angular Material一段时间。在使用md-select时,我遇到了一个问题,其中出现重复的md-option值错误。md-select在md-options中检查重复选项的标准是什么

我知道md-options需要唯一的值,我正在为md-options分配一个数组。然而,这是一组对象。所以我想知道用于区分对象的标准是什么。 API没有多说这个。

我的用例需要根据另一个md-select的选择来改变md-select的md-options。所以我正在观察第一个md-select的选择,并在其更改中发射一个手表并更新第二个md-select的md-options。

下面是我使用分配阵列MD-选项的方法:

$scope.$watch('search.selectedTrades', function(newTrades, oldTrades) { 
    if ((newTrades.length === 0)) { 
     $rootScope.search.selectedTrades = oldTrades; 
     return; 
    } 
    if ($rootScope.search.selectedTrades && $rootScope.search.selectedTrades.length > 0) { 
     if (!$rootScope.identity.isClusterManager) { 
      $rootScope.search.selectedTrades = newTrades; 
      SearchFilterData.setSelectedTrades(newTrades); 
      $rootScope.search.selectedClusters = []; 
      $scope.clusters = []; 
      $scope.subareas = []; 
      var clusterKeys = []; 
      $rootScope.search.selectedTrades.forEach(function(t) { 
       t.lstClusters.forEach(function(c) { 
        if (clusterKeys.indexOf(c.ClusterKey) == -1) { 
         clusterKeys.push(c.ClusterKey); 
         $scope.clusters.push(c); 
        } 
       }) 
      }) 
     } 
    } else { 
     $scope.clusters = []; 
     $scope.subareas = []; 
     $rootScope.search.selectedClusters = []; 
     $rootScope.search.selectedSubAreas = []; 
     SearchFilterData.setSelectedTrades($rootScope.search.selectedTrades); 
    } 
}); 

在上面的代码中,clusterKey是每个对象的唯一实体。所以我使用它来将唯一值推入数组中。 然而,在我选择并取消选择各种选项后,这种情况发生在几个随机场景中。请告知我做错了什么,标记两个对象的标准重复

+0

如何解决这个问题?我有相同的情况。 – marty331

+0

我也正在'重复md-选项值'异常。我已验证绑定到选项列表的数组没有重复的条目。 –

回答

3

您没有提供您的标记,所以我不能确定,但​​在我的情况下,问题是由于省略了'值'属性在md-option标签中。

这是不好的:请注意缺少大括号

<md-option ng-repeat="item in vm.list" value="item.id">{{item.text}}</md-option> 

这不是:

<md-option ng-repeat="item in vm.itemlist" value="{{item.id}}">{{item.text}}</md-option> 

我认为失败的原因是,每个项目将被放置到选项列表将被赋予“item.id”的值(字面意思)。它会在重复的第二次迭代中失败。 使用大括号会导致使用'item.id'中的值。

希望这会有所帮助。

1

尝试使用ng值而不是value属性。

<md-option ng-repeat="item in vm.list" ng-value="{{item.id}}">{{item.text}}</md-option> 
相关问题