0

わかりました、これは以前にカバーされていることを知っており、これらすべての結果を試しましたが、私の状況ではそれらを機能させることができません:

複数のデータ ソースで angular ui-select を使用しようとしています。

例えば:

ng-model バインディングでは、「categories」という API エンドポイントからの投稿に関連付けられたカテゴリが取り込まれる $scope で空の配列を使用しています。

デフォルトで選択されている選択肢については、投稿オブジェクトに既に関連付けられているカテゴリを取得しています - これは別の 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>

問題は、私が何をしても、常に重複があり、角度が次のエラーでフリークアウトすることです:

「エラー: [ngRepeat:dupes] リピーターでの重複は許可されていません。一意のキーを指定するには、'track by' 式を使用してください。」

ああ、私は "track by $index" を使ってみましたが、うまくいきませんでした。

2 つの異なるデータ ソースを使用し、ui-select を取得して、別のデータ ソースからの重複が既に存在する場合に、選択ドロップダウンから重複を削除するにはどうすればよいですか?

私の問題を示す Plnkr: http://plnkr.co/edit/WDthr7?p=preview

4

2 に答える 2

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];
            }
         }   
      });
  });

上記のマージ ロジックは、時間を節約するためにこの例でのみ機能することに注意してください。

于 2016-01-22T02:41:35.673 に答える