2016-10-22 6 views
0

ちょっと、私はdupデータに関して角度のあるアプリに問題があります。私は正確なngリピートまで問題を特定しましたが、何が間違っているかはわかりません。データが重複しているとエラーが表示されていますが、データベースに現在4つしかないため、どのように表示されているのかわかりません。私は名前を変更するなどのようなさまざまなことを試しましたが、私には正しいと思われるので、なぜエラーが出るのか少し困惑しています。おそらくデータが2回読み込まれているかもしれないとは思いますが、どうすればよいのでしょうか?とにかく私は関連するコードを掲示し、そこにいくつかの角度の神が私の方法で私を指すことができる場合は、私は永遠に感謝するだろう。ng:反復を繰り返す。 ng-repeatで重複データを取得する

エラーメッセージがある: angular.min.js:84エラー:[ngRepeat:dupes] http://errors.angularjs.org/1.2.9/ngRepeat/dupes?p0=task%20in%20tasks%20track%20by%20task.id%20%7C%20filter%20%3A%20filterTask&p1=undefined

のJavaScript

app.controller('tasksController', function ($scope, $http) { 
    getTask(); // Load all available tasks 

    function getTask() { 
     $http.post('ajax/getTask.php').success(function (data) { 
      $scope.tasks = data; 
     }); 
    } 

    $scope.addTask = function (task) { 
     $http.post('ajax/addTask.php?task=' + task).success(function (data) { 
      getTask(); 
      $scope.taskInput = ''; 
     }); 
    }; 

    $scope.deleteTask = function (task) { 
     if (confirm('Are you sure to delete this line?')) { 
      $http.post('ajax/deleteTask.php?taskID=' + task).success(function (data) { 
       getTask(); 
      }); 
     } 
    }; 

    $scope.toggleStatus = function (item, status, task) { 
     if (status == '2') { 
      status = '0'; 
     } else { 
      status = '2'; 
     } 
     $http.post('ajax/updateTask.php?taskID=' + item + '&status=' + status).success(function (data) { 
      getTask(); 
     }); 
    }; 
}); 

HTML:

<div class="task"> 
    <label class="checkbox" ng-repeat="task in tasks track by task.id | filter : filterTask"> 
     <input 
      type="checkbox" 
      value="{{task.STATUS}}" 
      ng-checked="task.STATUS==2" 
      ng-click="toggleStatus(task.ID,task.STATUS, task.TASK)"/> 
     <span ng-class="{strike:task.STATUS==2}">{{task.TASK}} [{{task.ID}}]</span> 
     <a ng-click="deleteTask(task.ID)" class="pull-right"><i class="glyphicon glyphicon-trash"></i></a> 
    </label> 
</div> 
+0

エラーメッセージを追加できますか? –

+0

確かに......................... – Seamy

+0

'track by $ index'を試してみてください – Akis

答えて

0

link in the error messageが示唆するようにtrack by

を使用して問題を回避できます
<div ng-repeat="value in [4, 4] track by $index"></div> 
0

メモする必要があるものはほとんどありません。
1)console.log($scope.tasks)を試して、何が返されているかを確認してください。おそらく、あなたが期待していなかったものを返します。それはあなたのデータベースに基づいて4つのオブジェクトの配列であり、おそらくアイテムのIDが複製されているはずです。

2)IDが重複している場合は、一意であることが保証されているので、代わりに$ indexでトラックを使用してみてください。これはあなたのエラーメッセージの問題を解決するはずです。

3)track byは、フィルタの後にある式の最後に置く必要があります。そうでない場合は、手順1でエラーメッセージを削除してもフィルタ式が適用されないことに気づくでしょう。

あなたのコードはこれで見つかるはずです。

<label class="checkbox" ng-repeat="task in tasks | filter: filterTask track by $index">...</label> 
関連する問題