gpt4 book ai didi

javascript - 如何在 Angular 中传递此回调并更新 $scope?

转载 作者:行者123 更新时间:2023-12-03 07:13:06 25 4
gpt4 key购买 nike

我正在用 AngularJS 编写一个基本的游戏应用程序。游戏有房间对象,其中一些包含敌人对象。我有一个 moveRoom() 函数,如果房间包含敌人,它会接受一个回调参数来运行。

在此回调函数内,我的 $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 传递给回调函数,但这没有帮助)。

我得到的错误是错误:$scope.apply不是一个函数,或者如果我删除它,我不会得到任何UI更改(我期望从ng-show ="encounterMode")。

我能想到的唯一可能破坏事情的是我在模块之间共享 $scope 的方式 - manager 模块是通过 requireJS 加载的另一个文件 - 它返回一个采用 $scope 参数的函数,因此我使用 $scope 初始化 manager 模块,以便其所有方法都可以访问全局范围。不确定将 Angular 与 AMD JavaScript 混合时是否有更好的方法来做到这一点。

关于使此回调更新范围,我是否缺少一些东西?难道是我传错了?

编辑:正如 TJ 指出的,我有一个拼写错误,应该是 $apply – 修复了这个问题后,我现在看到 Error: $rootScope:inprog Action Already In Progress 。有一种感觉我仍然错误地对待这个问题吗?

最佳答案

你好像打错字了。 apply代码应该是$apply

$scope.$apply(function() {
//-----^ this thing

关于javascript - 如何在 Angular 中传递此回调并更新 $scope?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com