好的,我知道之前已经介绍过这个问题并且我已经尝试了所有这些结果但是无法让它们在我的情况下工作:
例如:
对于ng-model绑定,我在$ scope上使用了一个空数组,该数组使用一个名为" categories"的API端点与该帖子相关联的类别填充。
对于默认选择的选项,我的类别已经与帖子对象相关联 - 这来自另一个api端点。
我的控制器
app.controller('MainCtrl', function($scope, $http) {
$scope.selectedTerms = [];
$http.get('currentTerms.json').then(function(currentTermsObj){
var currentTerms = currentTermsObj.data;
currentTerms.map(function(currentTerm){
var currentPostTerm = currentTerm;
$scope.selectedTerms.push(currentPostTerm);
});
});
$http.get('possibleTerms.json').then(function(possibleTermsObj){
$scope.possibleTerms = possibleTermsObj.data;
});
我的HTML:
<ui-select
multiple
ng-model="selectedTerms">
<ui-select-match placeholder="Select Category...">{{$item.name}}</ui-select-match>
<ui-select-choices
repeat="term in possibleTerms">
{{term.name}}
</ui-select-choices>
</ui-select>
问题在于,无论我做什么,都会出现重复和角度异常,并出现以下错误:
&#34;错误:[ngRepeat:dupes]不允许在转发器中重复。使用 &#39;跟踪&#39;表达式以指定唯一键。&#34;
哦,我已尝试使用&#34;跟踪$ index&#34;但没有运气。
如何使用两种不同的数据源并获取ui-select,以便在选项下拉列表中从其他数据源中删除重复项时删除重复项?
Plnkr演示了我的问题:http://plnkr.co/edit/WDthr7?p=preview
答案 0 :(得分:1)
在"<ui-select-choices/>"
<ui-select-choices repeat="color in availableColors | filter:$select.search">
(或)
在<ui-select-choices/>
标记中使用跟踪ID或名称(这个适用于我)
<ui-select multiple ng-model="selectedTerms">
<ui-select-match placeholder="Select Category...">{{$item.name}}</ui-select-match>
<ui-select-choices repeat="term in possibleTerms track by term.name">
{{term.name}}
</ui-select-choices>
</ui-select>
答案 1 :(得分:0)
另一种方法是自己合并它们。见http://plnkr.co/edit/NPdxYK8fqCPMhsKXRSGH?p=preview
在控制器中: -
$http.get('currentTerms.json').then(function(currentTermsObj){
var currentTerms = currentTermsObj.data;
currentTerms.map(function(currentTerm){
var currentPostTerm = currentTerm;
$scope.selectedTerms.push(currentPostTerm);
});
$http.get('possibleTerms.json').then(function(possibleTermsObj){
$scope.possibleTerms = possibleTermsObj.data;
for(var i = 0; i < $scope.possibleTerms.length; i++){
if(i < $scope.selectedTerms.length){
$scope.possibleTerms[i] = $scope.selectedTerms[i];
}
}
});
});
请注意,上述合并逻辑仅适用于此示例以节省时间。