2015-12-14 93 views
1

在我的應用程序中,我有靜態助手「類」爲我執行大量的邏輯,在這種特定情況下,此類是消息類,並執行需要訪問三種不同服務(工廠)的邏輯。是否有可能從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的數據包操作碼,無論範圍如何,都應該執行此代碼。這個執行完全在後臺完成,用戶甚至不知道它發生了。

我也是在其他地方(從範圍),在此是適用的,如在使用MessagingControllerMessaging.update當用戶發送消息時,我可以使用注入$networking服務調用Message.update。不幸的是注射在這裏不是一種選擇。

注:創建消息作爲一個服務實現將創建一個依賴循環,因爲我有三個服務目前file-cache, database, networking和通訊實現需要從所有三個功能。當收到消息時,網絡需要獲取有關用戶的信息,這些信息在本地SQLite數據庫中不可用。文件緩存用於在創建新線程時緩存用戶頭像圖像,並且當然需要數據庫來存儲消息。

回答

2

這個怎麼樣模式

angular.module('networking', []).factory('$networking', ['$database', function($database) { 

    var net = { 
     .... 
    }; 

    // Websocket implementation 
    if(packet.opcode == 8) { 
     Messaging.update(net, $database); 
    } 

    return net; 
}]); 
+0

對不起,花了這麼長時間,不得不圍繞很多代碼來改變這種模式。謝謝! – Hobbyist

0

那麼工廠方法不是實例(如放在附近,以服務),返回的對象是你在你的應用程序的其他部分引用同一個對象。所以你不能用'this'來引用它。你可以做這樣的事情(雖然我不知道這是一個很好的做法):

//inside your factory 
var fac = { //your factory object 
}; 
return fac; 

現在你可以替換「這個」與「FAC」。

我會做的是,而不是將您的消息模塊作爲服務包裝。爲了去除循環依賴,你創建了另一個服務/工廠,它將包裝所有這些服務。我不確定如何,因爲我不知道你的依賴關係圖,但這就是我所做的。

相關問題