如何在 Angular 中使用拼接从列表中删除项目
How to use splice in Angular to remove an item from a list?
模板如下所示:
<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
所以我认为问题出在控制器的某个地方。你们谁能告诉我正确的方法是什么?
从您的ng-repeat
函数来看,您的作用域包含revisions
数组,ng-repeat
遍历它们并创建隔离作用域,其中包含一个表示revisions
中每个项目的修订变量。
看起来您的控制器在 ng-repeat
之外,因此它看不到包含单个revision
实例的作用域,但它确实看到了原始revisions
数组,因此您应该能够直接splice
它。
$scope.revisions.splice($index, 1)
您可能
还想检查商品的 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; // !!!
}
}
};
在循环内部调用数组splice
后break;
至关重要。也就是说,如果您删除nth
项,您的循环将继续到下一次迭代 - 但是,这最后一项已被删除,因此引用 undefined
的属性会引发Type Error
。
希望这有帮助!
相关文章:
- 要求输入在数据列表中
- 从javascript创建一个列表
- 如何使用jQuery选择下拉列表的值
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- 如何使用json将对象列表从java转换为javascript
- 区分JSON中的矩阵和列表列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 接受不在列表中的值-引导组合框
- 禁用jQuery中的下拉列表
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 如何在javascript中迭代数字列表
- orderBy$filter在项目删除(拼接)后阻止ng重复列表更新
- 我想在单击clear链接时使用javascript中的拼接删除整个列表
- 如何在 Angular 中使用拼接从列表中删除项目
- 在JSON列表中拼接一个元素
- Javascript项目拼接自出列表
- 如何在javascript中拼接项目列表