我正在集成我用 Angular 编写的 2D JavaScript 游戏引擎。该游戏是一款太空游戏,引擎处理太空环境的模拟,Angular 处理与空间站交易商品的菜单等。
Angular 服务充当两个上下文之间的接口。例如,当游戏需要记录消息时,它会调用logServiceInstance.logDebug("Some message");
. 有一个 ConsoleController 将日志消息提供给覆盖游戏画布的 HTML div(在 $scope.logs 上使用 ng-repeat):
angular.module('game')
.controller('ConsoleController', ['$scope', 'LogService', function($scope, logService) {
$scope.logs = logService.getLogs();
}]);
因为游戏引擎在 Angular 之外更新服务,所以 Angular 不知道其中一些日志,所以所有的日志方法(logInfo、logError、logDebug 等)都会在 logService 上调用它。从游戏创建的日志将“true”作为第二个参数传递以触发摘要:
addLog: function(log, updateContext) {
console.log('(' + log.level + ') ' + log.message);
logs.unshift(log);
// NOTE: updateContext should be passed if log is
// called outside of Angular context. This way Angular
// reacts to the change.
if(updateContext != null && updateContext === true) {
// notify angular of a change
$rootScope.$digest();
}
}
ConsoleController 无法一致地提取日志消息。日志在 HTML 显示中丢失,但显示在 javascript 控制台中。此外,我收到在摘要中触发摘要的错误。
问题:
- 我如何知道某个其他来源的摘要是否已经在进行中?
- 服务似乎是统一两个框架之间传递状态的最佳方式,但这是一个糟糕的模式吗?如果是这样,为什么?
在此先感谢 Angular 大师。
注意:游戏引擎是https://bitbucket.org/profexorgeek/frostflake-js-game-engine/