我有一个支持 HTML5 Canvas 可视化的指令。该指令具有多种方法来修改可视化的不同部分。问题是具有不同父/子/兄弟关系的多个控制器需要与该指令进行通信。现在我已经将这种非常糟糕的方式连接起来,将事件发送到指令的父控制器,然后将它们广播到指令。
我听说过使用服务来做这样的事情,但没有真正解释为什么。我想使用这样的东西:
angular.service('CanvasCommunication', function($rootScope) {
this.canvasAction = function() { $rootScope.broadcast('canvasAction'); };
}
然后让画布中的侦听器实际执行该操作。然后可以将该服务注入到与画布通信的任何控制器中。
问题是 $rootScope.broadcast() 的性能很糟糕,我想确保这个通信通道是以最有效的方式构建的。
有没有人处理过类似的事情并想到更好的办法?
我遇到了同样的问题 - 控制器需要相互交互,应用程序的不同部分相互发送消息,等等。在我的项目中,我实现了 MessageService。这是一个非常基本的版本(但说实话绰绰有余):
module.factory('MessageService',
function() {
var MessageService = {};
var listeners = {};
var count = 0;
MessageService.registerListener = function(listener) {
listeners[count] = listener;
count++;
return (function(currentCount) {
return function() {
delete listeners[currentCount];
}
})(count);
}
MessageService.broadcastMessage = function(message) {
var keys = Object.keys(listeners);
for (var i = 0; i < keys.length; i++) {
listeners[keys[i]](message);
}
}
return MessageService;
}
);
您可能希望为特定主题注册侦听器,并按主题过滤消息,也可能不希望。我的还对主题上的消息进行排队,直到它们被清除,以便在加载新视图时可以查看消息(以便将“成功 - 已保存文件”与页面更改配对)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)