AngularJS和SignalR - 定义app模块的区别

时间:2014-07-14 11:07:09

标签: javascript angularjs signalr

我正在尝试将我的SignalR代码与angular集成。我跟着,也许,5个不同的教程,但无法让它工作。

Following this tutorial,我的代码唯一的区别是我的app.js 文件如下所示:

var myApp = angular.module('myApp', []);

$(function () {
      $.connection.hub.url = server;
      $.connection.hub.logging = true;

      $.connection.hub.start().done(function () {
          console.log('Hub connection open. ID: ' + $.connection.hub.id);
      });
});

angular.module('myApp').value('chat', $.connection.testhub);

,教程app.js如下所示:

(function() {
  angular.module('myApp', [])

  $(function () {
      $.connection.hub.url = server;
      $.connection.hub.logging = true;

      $.connection.hub.start().done(function () {
          console.log('Hub connection open. ID: ' + $.connection.hub.id);
      });
   });

  angular.module('myApp').value('chat', $.connection.testhub);
});

当从控制器访问“聊天”服务时,我可以控制台.log我的集线器。 但SignalR日志表示连接开始在订阅任何集线器之前发生,因此当然没有调用客户端方法。

所以我的问题是,我们的app.js文件的区别是这个问题的原因吗?为什么?

其他一切都是一样的,我已经确认SignalR服务器正常工作。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

经过多次尝试但没有成功,我决定使用我的ApplicationController(所有控制器的父级)作为SignalR处理程序。从那里我可以订阅所有必要的集线器和广播事件到子范围来处理不同的需求。我确信这不是最好的做法,但对于我的小应用程序来说,这可能已经足够了。

myApp.controller('ApplicationController', ['$scope', 'logger', 'AuthService', function ($scope, logger, AuthService) {

$.connection.hub.url = serverUrl;
$.connection.hub.logging = true;

$.connection.testhub.client.getStaff = function (value) {
    $scope.$broadcast('someEvent', value);
};

$.connection.hub.start().done(function () {
    console.log('Hub connection open. ID: ' + $.connection.hub.id);
});

$.connection.hub.error(function (err) {
    console.log("Error: " + err);
});
}]);

因此,我将广播以向下游发送事件并发出以将其从子控制器发送到父级。我想这会做到。