在我的应用程序中,我有静态帮助程序“类”为我执行大量逻辑,在这种特定情况下,此类是消息传递类并执行需要访问三个不同服务(工厂)的逻辑。
唯一需要引用此类的工厂是网络工厂,因为当收到某个数据包时,我需要强制消息传递从服务器更新它的数据库。
这是我正在尝试做的一个例子:
angular.module('database', []).factory('$database', function() {
// SQLite implementation
return {
// ...
};
});
angular.module('networking', []).factory('$networking', ['$database', function($database) {
// Websocket implementation
if(packet.opcode == 8) {
Messaging.update(this, $database);
}
return {
// ...
};
}]);
Messaging = {
// Messaging implementation..
update: function(networking, database) {
if(networking === undefined) { ]
console.log("Networking is undefined.");
return;
}
if(database === undefined) {
console.log("Database is undefined.");
return;
}
// Messaging update implementation.
};
不幸的是,Networking is undefined.
消息在尝试调用 Messaging.update(this, $database)
时出现,如上所示。
注意:我不能简单地将 $networking 实现注入(inject) $scope 并使用它,因为这是在“后端”处理的。此逻辑应完全独立于范围执行。每当服务器(Websocket 实现)向客户端发送数据包操作码 8 时,无论范围如何,都应执行此代码。此执行完全在后台完成,用户甚至不知道它发生了。
我还在其他适用的地方(从范围内)使用 Messaging.update
,例如当用户发送消息时在 MessagingController
中,我可以使用注入(inject)的 $networking
服务调用 Message.update
。不幸的是,注入(inject)不是这里的一种选择。
注意:创建消息即服务实现会产生依赖循环,因为我目前有三个服务 file-cache, database, networking
并且消息实现需要这三者的功能。当收到消息时,网络需要获取本地 SQLite 数据库中不可用的用户信息。文件缓存用于创建新线程时缓存用户头像图像,当然还需要数据库来存储消息。
最佳答案
这个模式怎么样
angular.module('networking', []).factory('$networking', ['$database', function($database) {
var net = {
....
};
// Websocket implementation
if(packet.opcode == 8) {
Messaging.update(net, $database);
}
return net;
}]);
关于javascript - 是否可以从 AngularJS 工厂返回 `this`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275258/