从外部角度调用$digest的缺点是什么
What are the drawbacks to calling $digest from outside angular?
我正在开发一款只使用Angular作为用户界面的游戏。游戏代码有一个每秒运行一次的循环。为了保持UI的同步,我直接从Angular外部调用$digest。
//from angular code
angular
.module('app')
.factory('acp', acp);
acp.$inject = ['$rootScope', '$window'];
function acp($rootScope, $window){
var service = $window.ACP = {
heartBeat: heartBeat,
rootScope: $rootScope
};
return service;
function heartBeat(){
$rootScope.$$phase || $rootScope.$digest();
}
}
//from game code
setInterval(function(){
//do stuff within game
updateResources();
window.ACP.heartBeat();
}.bind(this), 1000);
对于一个简单的前端游戏,这是允许的吗?你能建议我的angular ui和游戏代码之间更好的通信方式吗?我有另一个全局变量,它保存了我的游戏状态,Angular和游戏代码都直接从窗口对象中使用,因为我非常喜欢对象引用的便利性和直接性。我理解使用全局变量的糟糕之处,但我觉得一旦你进入游戏领域,界线就会变得有点模糊。如有任何建议,我们将不胜感激。
您不必使用setTimeout。Angular提供了一个包装器$timeout
,它将负责运行摘要循环,这意味着您不必手动执行。
至于你的游戏代码和angular ui之间的通信,这里有一些建议
- 您可以使用
factories
或services
来存储游戏状态(而不是使用任何全局变量)- 你也可以使用
websockets
,这样你就可以与你的后端api(或游戏代码)建立一个套接字连接,而不是每1秒调用一次,他们可以相互交谈,而无需每1秒调用你的api。您可以从socket.io
开始实现这一点- 您也可以使用
$rootScope
来存储值,但将其作为最后一个选项注意:您使用的是setTimeout。要在某个时间间隔触发某个事件,请使用
$interval
。但是,分析以上选项,找出哪一个最适合你。
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 什么'最合适的数据结构是什么?(使用一个有间隙的数组是否存在缺点或注意事项?)
- 将Jquery UI与AngularJS一起使用的优点和缺点是什么?
- 使用javascript构建整个网页的缺点是什么
- 与Electron相比,Chrome应用程序的优点和缺点是什么
- 在使用 Jasmine 进行单元测试时,javascript 揭示模块模式的缺点是什么?
- 同时具有网络视图和本地视图的混合应用程序的优点和缺点是什么
- SAPUI5:作为应用程序包装器的容器,sap.m.Shell和sap.m.App的优点和缺点是什么
- 将javascript调用为HTML php样式的缺点(和优点)是什么?
- 使用meteor.js的(潜在)缺点是什么?
- 在数组上设置字符串属性的缺点是什么?
- 如果有的话,使用对象作为数组索引的缺点是什么?
- HTML、JavaScript和CSS最小化的缺点是什么?
- 与官方标准application/ JSON相比,将JSON数据作为文本/javascript提供的优点和缺点是什么?
- 闭包对象创建:这两种方法的优点/缺点是什么
- 在 JavaScript 中创建函数对象的优点/缺点是什么?
- 从外部角度调用$digest的缺点是什么
- 只有Json的web应用程序.缺点是什么?(或专业)
- 以下数据提交方法的缺点是什么?