0

AngularJS<li>の要素にバインドされたアイテムの配列があります。<ul>それぞれの横にある「アイテムを削除」をクリックして、アイテムを削除できるようにしたいです。

StackOverflow に関するこの回答では、正確にそれを行うことができますが、要素が削除される配列の名前がハードコーディングされているため、リスト間で使用することはできません。

ここでJSfiddle セットアップの例を見ることができます。ゲームの横にある [削除] をクリックしようとすると、ゲームではなく生徒が削除されます。

ボタンから戻すと、その時点でAngularthisの $scope にアクセスできるようになりますが、その項目を親配列からきれいに削除する方法がわかりません。

ボタンを で定義しng-click="remove('games',this)"、関数を次のようにすることができます。

$scope.remove = function (arrayName, scope) {
  scope.$parent[arrayName].splice(scope.$index,1);
}

(この JSFiddleのように) しかし、私がその中にいる間に親配列に名前を付けるのは、1 年でコードを編集するときに機能を壊す非常に良い方法のようです。

何か案は?

4

1 に答える 1

2

あなたが合格しようとしていた理由がわかりませんでしthisた..Angularで処理する必要はほとんどありませんthis。(そして、それがその強みの1つだと思います!)。

これは、少し異なる方法で問題を解決するフィドルです。

http://jsfiddle.net/WJ226/5/

コントローラーは次のように簡素化されました。

function VariousThingsCtrl($scope) {

    $scope.students = students;
    $scope.games = games;

    $scope.remove = function (arrayName,$index) {
      $scope[arrayName].splice($index,1);
    }
}

全体を渡す代わりに、scope単に ? を渡さないのはなぜ$indexですか? すでに配列が配置されているスコープにいるので、それ以降は非常に簡単です。

于 2013-04-25T12:17:36.720 に答える