Javascript 有没有可能从AngularJS工厂返回“this”?
在我的应用程序中,我有静态助手“类”,它们为我执行大量逻辑,在这个特定的例子中,这个类是消息传递类,执行需要访问三个不同服务(工厂)的逻辑 唯一需要引用此类的工厂是networking工厂,因为当收到某个数据包时,我需要强制消息传递从服务器更新它的数据库 下面是我尝试做的一个例子:Javascript 有没有可能从AngularJS工厂返回“this”?,javascript,angularjs,Javascript,Angularjs,在我的应用程序中,我有静态助手“类”,它们为我执行大量逻辑,在这个特定的例子中,这个类是消息传递类,执行需要访问三个不同服务(工厂)的逻辑 唯一需要引用此类的工厂是networking工厂,因为当收到某个数据包时,我需要强制消息传递从服务器更新它的数据库 下面是我尝试做的一个例子: angular.module('database', []).factory('$database', function() { // SQLite implementation return {
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.
};
不幸的是,网络未定义。
在尝试调用消息。更新(此$database)
时,会显示消息,如上所示
注意:我不能简单地将$networking实现注入$scope并使用它,因为这是在“后端”处理的。此逻辑应完全独立于范围执行。每当服务器(Websocket实现)向客户机发送8的数据包操作码时,不管作用域如何,都应该执行此代码。这种执行完全是在后台完成的,用户甚至不知道它发生了
我也在使用消息。在其他适用的地方(范围内)更新
,例如在消息控制器
当用户发送消息时,我可以调用消息。使用注入的$networking
服务更新
。不幸的是,注射在这里不是一种选择
注意:创建消息传递即服务实现将创建一个依赖循环,因为我目前有三个服务文件缓存、数据库、网络
,而消息传递实现需要这三个服务的功能。当收到消息时,需要网络获取本地SQLite数据库中不可用的用户信息。文件缓存用于在创建新线程时缓存用户化身图像,当然需要数据库来存储消息 这个图案怎么样
angular.module('networking', []).factory('$networking', ['$database', function($database) {
var net = {
....
};
// Websocket implementation
if(packet.opcode == 8) {
Messaging.update(net, $database);
}
return net;
}]);
工厂方法没有实例化(与服务类似),返回的对象与应用程序其他部分中引用的对象相同。所以你不能用“this”来引用它。您可以这样做(尽管我不确定这是否是一个好的做法): 现在,您可以将“this”替换为“fac”
相反,我要做的是将消息传递模块包装为服务。为了删除循环依赖项,您需要创建另一个服务/工厂来包装所有这些服务。我不知道具体是怎么做的,因为我不知道您的依赖关系图,但我就是这么做的。很抱歉,花了这么长时间,不得不更改大量代码才能使此模式正常工作。谢谢
//inside your factory
var fac = { //your factory object
};
return fac;