我一直在我的项目中使用Angular Material一段时间.使用md-select时,我遇到了一个问题,即我得到重复的md-option值错误.
我知道md-options采用唯一值,我正在为md-options分配一个数组.但是,这是一个对象数组.所以我想知道用于区分对象的标准是什么.API没有说太多.
我的用例要求根据另一个md-select的选择更改md-select的md-options.因此,我正在观看第一个md-select的选择,并在其更改时触发监视并更新第二个md-select的md-options.
以下是我用于将数组分配给md-options的方法:
$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是每个对象的唯一实体.所以我用它来将唯一值推送到数组中.然而,在我选择和取消选择各种选项之后,这在几个随机场景中发生.请告知我做错了什么以及标记两个对象重复的标准是什么
你没有提供你的标记,所以我不能确定,但在我的情况下,问题是由于省略了md-option标签中'value'属性的双重curleys.
这很糟糕:注意缺少花括号
{{item.text}}
这不是:
{{item.text}}
我认为这个失败的原因是每个项目将被放入选项列表中,将被赋予值'item.id'(字面意思).它将在重复的第二次迭代中失败.使用花括号会导致使用'item.id'中的值.
希望这可以帮助.