2014-07-07 60 views
0

我正在編寫一個應用程序,目標是管理通過socket.io連接的一些客戶端。我必須管理他們的狀態(連接/斷開連接)以及客戶端的實時細節,如發出的錯誤。我嘗試了兩種不同的方法,在控制器上設置監聽器並創建服務。控制器方法的問題是每次加載控制器時都必須重複發出以獲取最新數據。有了這些服務,我有問題,有一個全球監聽器(接收來自所有客戶的一般通知),我無法計算如何從另一個服務(我不認爲你可以)操縱服務。我一直在考慮實現一個全局控制器,所有控制器都可以繼承我的數據或將其追加到$ rootScope。在我走之前。我想知道從更多有經驗的角度開發者那裏得知,從這樣的應用程序和管理全球數據是更好的方法?保持globla數據的最佳方法AngularJS

感謝

+0

這是$ rootScope的目的,但要聰明,不要濫用它。 – Shomz

+0

我認爲服務是更好的選擇。一個服務可以通過依賴注入來依賴另一個服務:app.factory('myService',function(myDependentService){...}); – pixelbits

+0

@pixelbits我有一個問題。保持說注入的服務是不確定的。但我同意,IMO認爲服務是更優雅的方式。 – LouieV

回答

0

的問題是在這裏:

.provider('notifications',['socket', 'redisMsg', function(socket, redis) { 

要定義提供商,並在同一時間注射服務(插座,redisMsg)的實例。這是不允許的。在提供商中,您只能注入其他提供商。如果你需要的情況下,則$應該獲得與那些情況下被注入,而不是在提供功能:

.provider('notifications',[function() { 
    var notifications = []; 
    return { 
     $get: ['socket', 'redisMsg', function(socket, redis) { 
      return { 
       listen: function() { 
        // complains in the line below 
        // unknown provider socket 
        // if I change to socketProvider 
        // still fails with 
        // undefined is not a function 
        socket.on('redis', function(msg) { 
         redis.processRedis(msg); 
         var message = redis.getMessage(); 
         if (message.action !== 'jobRunning') { 
          notifications.push(message); 
         } 
         if (message.action === 'PeberryChange') { 
          socket.emit('get-peberries'); 
         } 
         console.log(message); 
        }); 
       }, 
       getNotifications: function(action) { 
        if (typeof action !== 'undefined') { 
         return alert("NOT DONE YET BRUH!!!"); 
        } 
        return notifications; 
       } 
      }; 
     }] 
    }; 
}]) 

Plunker Here

相關問題