2017-02-22 44 views
0

我正在用SignalR網絡聊天應用程序創建一個簡單的AngularJS。我有許多功能可以工作,但是我想創建一個可維護的方式來在服務器發送消息時接收消息等等。我遇到了最後一個問題,我似乎無法找到從我的SignalRData服務返回到它所坐的服務的方式。所以我的層次結構如下。AngularJS/SignalR傳遞數據

  1. SessionState的
  2. SignalRData

我有我的聊天視圖控制器正在使用的SessionState的服務。

我有寫在SignalRData中的方法處理從服務器接收消息如何將該數據發送到存儲在SessionState內的數組中,以便我的聊天控制器可以使用它綁定到ng-repeat來創建一個聊天窗口?

我所有的代碼,在收到消息非常有用

SignalRData服務部分:

// Create a function that the hub can call to broadcast messages. 
    chat.client.incomingMessage = function (data) { 
     console.log("New message from " + data.sender + ": " + data.message + "."); 
    }; 

而且我對這個服務對象:

// Declare a proxy to reference the hub. 
    var chat = $.connection.chatHub; 

    var State = { 
     Connection: 
      { 
       Connected: false, 
       Connection_Id: "", 
       Method: "auto", 
       chat: chat.client 
      } 
    }; 

什麼在SessionState的服務回事: 這已被簡化查看

var State = { 
     Server: { 
      DataService: SignalRData 
     }, 
     Messages: { 
      Chats: [] 
     } 
    }; 

聊天控制器:

我最初的想法是,我可以通過我的服務共享chat.client對象,然後在我的控制器重寫功能,遺憾的是這個沒有工作,所以我堅持試圖找出一個從SignalRData獲取數據到SessionState的方式。

(function() { 
'use strict'; 

angular 
    .module('Controllers') 
    .controller('chat_Controller', chat_Controller); 

chat_Controller.$inject = ['$scope', 'SessionState']; 

function chat_Controller($scope, SessionState) { 
    $scope.pageClass = ""; 

    SessionState.Session.ValidatePage("User"); 

    SessionState.Session.SmoothSlide("Heading"); 


    SessionState.Server.DataService.Connection.chat.incomingMessage = newMessage; 

    function newMessage(data) { 
     console.log("Testing"); 
    }; 

} 
})(); 

回答

0

我做了一些研究,發現在我的服務中簡單地使用$ rootScope是在他們之間廣播我的數據的最簡單方法。

但是我想對此做一些輸入。