模板如下所示:
<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
所以我认为问题出在控制器的某个地方。你能不能告诉我这样做的正确方法是什么?
答案 0 :(得分:2)
根据您的ng-repeat
函数判断,您的范围包含revisions
数组,ng-repeat
遍历它们,并使用表示revisions
中每个项目的修订变量创建隔离范围。
看起来您的控制器不在ng-repeat
范围内,因此它看不到包含单个revision
实例的范围,但它确实看到了原始的revisions
数组,因此您应该只能直接splice
。
$scope.revisions.splice($index, 1)
答案 1 :(得分:0)
向您的系统报告已做出更改也是明智的 - 这是迈向事件驱动架构的第一步。
在这种情况下,您的代码可能如下所示:
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
希望这有帮助!