从数组中移除Item会在object的位置留下undefined
AngularJS Removing Item from Array Leaves undefined in place of object
我一直在做一个AngularJS项目,以前遇到过这个问题。我的控制器中有如下数组:
$scope.items = [];
$http.get(API_URL_HERE).then(onSuccess);
调用onSuccess方法,对象填充数组。我现在有:
console.log($scope.items)
生成[Object, Object, Object, ...]
现在,当我在AngularJS ng-repeat
循环中使用$scope.items
时,它工作得很好,因为它应该但是,如果我试图从$scope.items
数组中删除一个元素,它似乎总是删除元素,但将其替换为一个未定义的值,这个未定义的值由AngularJS在ng-repeat
循环中解释,并在没有数据的模板中输出一个空行。例如,如果使用ng-show / ng-hide
,即使数组中没有真正的对象,它仍然认为它是满的,因为它已经满了[undefined, undefined, undefined ...]
。
这引起了严重的头痛,我看到其他人有同样的问题,但修复似乎不太好。
我找到的解决方案,似乎工作得很好。还请注意,有些人说这只是一个纯Javascript的问题,好吧,我不认为它是,当我尝试在AngularJS和纯Javascript,我得到了2个不同的结果与相同的设置和数据。
例如,我有一个$scope.remove
方法来处理从$scope.items
数组中删除项目。
当我执行以下代码时:
$scope.items.splice(index, 1);
结果是console.log输出[Object, Object, undefined, Object, ...]
。
但是,通过执行以下代码:
$scope.items.splice(index, 1);
$scope.items.pop();
从console.log [Object, Object, Object]
和我的ng-repeat
循环更新中得到以下输出,因为它应该没有空行。
我的解决方案似乎工作得很好,但请让我知道,如果你发现任何问题。这段代码显然比我在不同网站上看到的其他代码更干净,而且在我测试过的所有浏览器上都能正常工作。
更新我的onSuccess
方法是这样的:
var onSuccess = function(response){
$scope.items = response.data.items;
//results in [Object, Object, Object, ...]
};
我的$scope.remove
方法是这样的:
$scope.remove = function(index){
$scope.items.splice(index, 1);
//results in [Object, Object, undefined, Object, ...]
//add the following code
$scope.items.pop();
//results in [Object, Object, Object, ...] the undefined has gone
};
并且只有在添加pop方法时它才会正常工作
- jquery试图按名称获取按钮位置
- 我可以获得相对于被点击元素的确切点击位置吗
- 谷歌地图固定位置覆盖
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 循环比赛位置算法
- /undefined在我的404错误日志中多次出现
- es6 相当于下划线查找位置
- jQuery循环在特定位置暂停
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 自定义函数中的光标位置
- RequireJS向模块传递配置总是返回undefined
- 安卓平台上的QWebView HTML5地理位置
- DIV并排,位置不正确
- 使用jQuery更改元素的顶部位置
- JSON数组数据返回Undefined
- 为什么根据括号的位置来引用窗口或对象?并返回undefined
- 从数组中移除Item会在object的位置留下undefined
- three.js;无法读取属性'位置'of undefined和don'我不知道为什么
- 当使用x作为索引号时.要在函数中显示数组位置,数组返回undefined