从角度$scope承诺中删除一行
Remove a row from an angular $scope promise
Angular 足够聪明,可以直接绑定承诺。 我有一个ng-grid实例,它绑定到从服务返回的承诺。 稍后我想删除该网格中的一条记录,但不确定如何做到这一点,因为我没有可以直接操作的数组。
例如,以下内容将抛出错误"TypeError:对象#没有方法'splice'",因为"gridData"实际上不是一个数组。
//Bind promise directly to scope (get returns a promise not an array)
$scope.gridData = myService.get();
//Later I remove a row based on user a user clicking a button on the grid row.
var function = removeRow(rowIdx)
{
$scope.gridData.splice(rowIdx, 1);
};
最终,如何将范围值设置为承诺,同时仍直接操作数据?
承诺解析
后,无法更改其值。
您可以做的是将实际值设置为 scope 属性并修改此值。事实上,你应该尽快摆脱承诺。
//Bind promise directly to scope (get returns a promise not an array)
myService.get().then(function (resolved) {
$scope.gridData = resolved;
});
//Later I remove a row based on user a user clicking a button on the grid row.
function removeRow(rowIdx) {
$scope.gridData.splice(rowIdx, 1);
};
底层
数据数组在$scope.gridOptions.ngGrid.data
处公开(假设您的ngGrid绑定到gridOptions
( - 你可以直接操作它,尽管我没有尝试过这个
有多种方法可以做到这一点。其中之一是编写过滤器来对数组进行切片:
.filter("slice", function () {
return function (array, begin, end) {
if (!angular.isArray(array)) return;
return array.slice(begin, end);
};
});
并在 ng-repeat 中的集合中使用它:
<li ng-repeat="item in (data|slice:1)">{{item}}</li>
工作示例。
此外,由于您的数据是从 promise 返回的,因此没有什么能阻止简单地添加到控制器:
$scope.gridData = myService.get().then(function (data) {
return data.slice(1)
});
工作示例。
相关文章:
- 如何在使用Javascript删除某一行时更新表
- 使用VBScript或Javascript从文本框(文本区域)中删除最后一行空/空行
- 删除数据库(JSP)上的一行
- 使用Ajax和JQuery从SQL数据库中添加和删除一行
- infrastics igGrid:如何使用javascript删除一行
- 使用jQuery删除表行,但禁止删除第一行
- Html-从数据库中删除一行
- 关于FF的IMACROS.JS-如何删除宏末尾源csv文件的第一行
- 删除表中的最后一行时显示警报窗口
- 如何编辑和删除jQuery数据表的每一行
- 删除表的最后一行,除非它是使用 jquery 的唯一行
- 单击按钮时删除一行
- 如何防止谷歌闭包编译器删除一行
- 表 PHP 中每一行的删除按钮
- 通过单击删除同一行中存在的链接来删除特定行
- 删除表中的最后一行
- 前端 MySQL,删除一行
- 如何在 jQuery/javaScript 中从 txt 文件中删除一行
- 使用表单中的PHP按钮根据变量ID从MYSQL数据库表中删除一行
- 如何从javascript的最后一行删除某些字符串