2017-02-22 60 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是在他们之间广播我的数据的最简单方法。

但是我想对此做一些输入。