如何在Angular中传递此回调并更新$scope
How can I pass this callback in Angular and update $scope?
我正在AngularJS中编写一个基本的游戏应用程序。游戏有room
对象,其中一些对象包含enemy
对象。我有一个moveRoom()
的函数,如果房间包含enemy
,它会使用回调参数来运行。
在这个回调函数中,我的$scope
更改不会在ng-show
元素上注册。我尝试过$scope.apply()
和$scope.digest()
的组合,但没有成功:
$scope.moveToRoom = function (newRoom) {
// the callback here is only triggered if roomToMoveTo contains an enemy
manager.setCurrentRoom(roomToMoveTo, function($scope, encounterType, data) {
$scope.apply(function() {
if (encounterType === 'enemy') {
$scope.encounterMode = true;
}
});
});
};
setCurrentRoom()
函数(在另一个模块中定义)如下所示:
var setCurrentRoom = function (room, callback) {
$scope.currentRoom = room;
if (callback) {
var enemies = room.getEnemies();
if (enemies.length > 0) {
callback($scope, 'enemy', enemies);
}
}
return $scope.currentRoom;
};
(您可以看到,我已经尝试将$scope
传递给回调函数,但这并没有帮助)。
我得到的错误是Error: $scope.apply is not a function
,或者如果我删除了它,我就不会得到任何UI更改(这是我从ng-show="encounterMode"
得到的)。
我唯一能想到的可能会打破现状的是我在模块之间共享$scope
的方式——manager
模块是通过requireJS加载的另一个文件——它返回一个带有$scope
参数的函数,所以我用$scope
初始化manager
模块,这样它的所有方法都可以访问全局范围。不确定在混合Angular和AMD JavaScript时是否有更好的方法。
关于让这个回调更新作用域,我有什么遗漏吗?我传错了吗?
编辑:正如TJ所指出的,我有一个拼写错误,应该是$apply
——修复了这个错误后,我现在看到错误:$rootScope:inprog Action Already In Progress。有没有感觉我还在错误地处理这个问题?
您似乎有拼写错误。apply
代码应为$apply
$scope.$apply(function() {
//-----^ this thing
相关文章:
- 使用Javascript通过ajax回调更新DOM
- Angular,设置一个回调函数,用于在工厂和控制器之间更新
- 成功回调中的外部变量未正确更新
- 如何在Angular中传递此回调并更新$scope
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- socket.io事件回调中模型更改时角度视图未更新
- 如何更新列表项由jQuery AJAX调用添加的ASP Dropdown:错误无效的回发或回调
- 在 AJAX 回调之后,onblur 会返回到原始(或更新)字段
- 节点 + MONGO:更新记录需要回调
- 资源更新的回调
- 想要在回调中更新对象,给出正确的日志,但全局对象未更新
- 角度指令内的回调在模型更新之前调用
- D3JS 使用在同一回调中更新的属性
- 从回调更新 JavaScript 父变量
- 在 AngularJS 中更新视图后的回调
- 使用 AJAX 回调更新挖空可观察数组会生成随机排序的结果
- Javascript回调方法不更新AngularJS,除非是速记形式
- 传递给回调函数的对象未更新
- 更新'这'当返回用.apply()调用的函数时,从回调
- 通过回调更新全局变量