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,因此它看不到包含各个revision实例的范围,但它确实看到了原始revisions数组,因此您应该可以splice直接使用它。

 $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 回答