在我的應用程序中,我有靜態助手「類」爲我執行大量的邏輯,在這種特定情況下,此類是消息類,並執行需要訪問三種不同服務(工廠)的邏輯。是否有可能從AngularJS工廠返回`this`?
需要引用這個類的唯一工廠是網絡工廠,因爲當收到某個數據包時,我需要強制消息從服務器更新它的數據庫。
這裏是什麼,我試圖做一個例子:試圖調用Messaging.update(this, $database)
如上圖所示,當
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.
消息。
注意:我不能簡單地將$ networking實現插入$ scope並使用它,因爲這是在「後端」上處理的。這個邏輯應該完全獨立於範圍執行。只要服務器(Websocket實現)向客戶端發送8的數據包操作碼,無論範圍如何,都應該執行此代碼。這個執行完全在後臺完成,用戶甚至不知道它發生了。
我也是在其他地方(從範圍),在此是適用的,如在使用MessagingController
Messaging.update
當用戶發送消息時,我可以使用注入$networking
服務調用Message.update
。不幸的是注射在這裏不是一種選擇。
注:創建消息作爲一個服務實現將創建一個依賴循環,因爲我有三個服務目前file-cache, database, networking
和通訊實現需要從所有三個功能。當收到消息時,網絡需要獲取有關用戶的信息,這些信息在本地SQLite數據庫中不可用。文件緩存用於在創建新線程時緩存用戶頭像圖像,並且當然需要數據庫來存儲消息。
對不起,花了這麼長時間,不得不圍繞很多代碼來改變這種模式。謝謝! – Hobbyist