为什么是$scope$这里需要apply()来进行简单的删除,以及'这是推荐的方法(因为有了它,就会抛出一个错误
Why is $scope.$apply() needed here for a simple delete, and what's the recommended way (since with it, it throws an error)?
我只需要从范围内的项中删除一个属性。如果没有$scope.$apply()
,则不会删除该属性。使用$apply
时,会抛出一个错误"[$rootScope:inprog]$apply already in progress"。
为什么,那么做这件事的"正确"方法是什么?
$scope.loadPreset = function($event){
angular.forEach($scope.presets, function(preset, key) {
if($scope.presets[key].hasOwnProperty('loadStatus')) {
delete $scope.presets[key].loadStatus;
$scope.$apply();
}
});
};
(这是有效的,但抛出一个"$apply already in progress"错误)
如果没有$apply
,则不会删除该属性。以下(奇怪的)也不起作用:
$scope.$apply(function(){
delete $scope.presets[key].loadStatus
});
该函数是从hg-click
指令直接调用的。
(根据评论编辑)
尝试在apply函数中包装整个foreach。除非迭代预设需要很长时间,否则没有真正的理由为循环中的每个项目运行它:
$scope.loadPreset = function($event){
$scope.$apply(function(){
angular.forEach($scope.presets, function(preset, key) {
if($scope.presets[key].hasOwnProperty('loadStatus')) {
delete $scope.presets[key].loadStatus
}
});
});
};
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- Array.insert函数错误,因为Object函数Array(){〔本机代码〕}没有方法'插入'
- 为什么是$scope$这里需要apply()来进行简单的删除,以及'这是推荐的方法(因为有了它,就会抛出一个错误
- 为什么Ractive.js reset()和update()方法重复模板,因为有一个带有array.protype.so
- 拒绝在框架中显示,因为它设置了'X-Frame-Options'拒绝facebook.UI共享方法
- Rails链接到忽略e.preventDefault();从jQuery调用,因为方法::get已设置
- 我应该使用JQuery's的加载方法,因为谷歌看不到从该方法加载的内容