0

テンプレートは次のようになります。

<tr ng-repeat="revision in revisions" id="revision_{{revision.id}}">
    <td><a href="#/wiki/revision/{{ revision.id }}">{{ revision.title }}</a></td>
    <td>(<a href="#/wiki/revision/edit/{{ revision.id }}">Edit</a> | </td>
    <td><a ng-click="revisionDisappear($index)">Delete</a>)</td>
</tr>

そしてコントローラーは次のようになります:

$scope.revisionDisappear = function($index) {
    $scope.revision.revisions[0].splice($index, 1);
};

私が得るエラーは次のとおりです。Cannot read property 'revisions' of undefinedしたがって、問題はコントローラーのどこかにあると思います。どなたか、正しいやり方を教えていただけませんか?

4

2 に答える 2

2

ng-repeat関数から判断すると、スコープにはrevisions配列が含まれng-repeatており、それらを反復処理し、内の各アイテムを表すリビジョン変数を使用して分離スコープを作成しますrevisions

コントローラーが の外にあるように見えるため、個々のインスタンスng-repeatを含むスコープは表示されませんが、元の配列は表示されるため、直接アクセスできるはずです。revisionrevisionssplice

 $scope.revisions.splice($index, 1)
于 2013-11-05T07:24:29.093 に答える
0

アイテムの ID を確認することもできます...

また、変更が行われたことをシステムに報告することも賢明です。これは、イベント駆動型アーキテクチャへの第一歩です。

この場合、コードは次のようになります。

HTML:

<td><a ng-click="revisionDisappear(revision)">Delete</a>)</td>

JS:

$scope.revisionDisappear = function(revision) {
    for(var i = 0, len = $scope.revisions.length; i < len; i++){
        if($scope.revisions[i].id === revision.id){
            var removed = $scope.revisions[i].splice(i, 1);  // returns an array
            $scope.$emit('myRevisionModule://removed/revision', removed[0]);
            break; // !!!
        }
    }
};

ループ内で配列をbreak;呼び出した後は重要です。spliceつまり、nthアイテムを削除すると、ループは次の反復に進みますが、この最後のアイテムは削除されているため、 のプロパティを参照すると がundefinedスローされType Errorます。

お役に立てれば!

于 2015-04-13T19:58:35.333 に答える