2017-10-03 13 views
2

コンテキスト:私は各タスクをmysqlに保存するためにAPIを使用するタスクリストを持っています。 私delete methodはNGクリック(ng-click="remove(todo, $index)")とボタンによってトリガーとは以下のように見えます。Angularjs:インデックスを使用してアイテムを削除

$scope.remove = function (todo, index) { 
    $http({ 
     method: 'DELETE', 
     url: 'http://api.dev/api/task/delete/' + todo.id }).then(function (response) { 
     $scope.todos.splice(index, 1); 
     }); 
    }; 

これはうまく動作しますが、私はそれがtodoを渡すだけ使用せずに動作させる可能性がどのように思ったんだけどindex

+0

私はあなたが削除するToDoのかを知るためのTODOのIDを持っている必要があります信じています。 – Matt

+0

予定表を渡さない理由は何ですか? – Matt

+0

@Mattはおもしろいのですが、 'index'を使って' id'に行くことはできませんか? –

答えて

2

同じ配列を使用することにより、リストには - todosを入力します。フィルタを適用したり、リストを作成するときに順序を使用したりして、リスト内の項目の順序を操作していないと仮定します。

$scope.remove = function (index) { 
    var listElement = $scope.todos[index]; 
    $http({ 
     method: 'DELETE', 
     url: 'http://api.dev/api/task/delete/' + listElement .id }).then(function (response) { 
     $scope.todos.splice(index, 1); 
     }); 
    }; 

これは、リストの順序を混乱させることがあるため、これはベストプラクティスではありません。

ここでは、私が何を話しているかを示す少しのデモです。コントローラーでリストの順序を調べます。さて、HTMLの名前の後のインデックスを見てください。

demo

+1

これは、 'todos'が定義されていないので、エラーが出ると思います。 –

+1

あなたはこのようにすることができます。あなたは 'を実行することによってtodosを得ることができました。angular.element( '#todos')'とそのidでtodosをタグ付けしてください。 Buuuuuuut、しないでください。これは悪いです。 – Matt

+0

あなたが正しいです、私が$スコープ部分を切り取ってコピーしました。 – DanteTheSmith

関連する問題