【发布时间】:2014-06-26 14:12:41
【问题描述】:
当控制器位于 ng-include 的“内部”时,我遇到了从控制器连接到集线器的奇怪问题。
服务:
angular.module('app').service('signalRSvc', function($, $rootScope) {
var proxy = null;
var initialize = function() {
var connection = $.hubConnection();
proxy = connection.createHubProxy('myHub');
connection.start();
proxy.on('srvMessage', function(data) {
$rootScope.$emit('newMessage', data);
});
}
return {
initialize: initialize
};
});
控制器:
function MyController($scope, signalRSvc) {
signalRSvc.initialize();
var vm = this;
vm.message = '';
$scope.$parent.$on("newMessage", function (e, data) {
$scope.$apply(function () {
vm.mesage = data;
});
});
}
Index.html(精简版):
<div data-ng-controller="MyController as vm">
Server message {{vm.message}}
</div>
<div data-ng-controller="LoginController as vm">
Server message 2: {{vm.message}}
</div>
<div data-ng-include="'app/layout/shell.html'"></div>
还有Shell.html:
<div data-ng-controller="MyController as vm">
Server message {{vm.message}}
</div>
调试这个我的服务初始化被触发了三次,但是服务器端的 OnConnect 只被触发了两次。向服务器发布消息时,Index.html 中的控制器已更新,但 shell 中的控制器未更新。如果我从 Index.html 中删除控制器,我会得到 1 个初始化和 0 个 OnConnect 服务器端。
但是,如果我放弃使用服务并将以下代码放入控制器中,它将获得 3 个连接并更新所有控制器:
var hub = $.hubConnection();
var proxy = hub.createHubProxy('myHub');
proxy.on('newMessage', function(data) {
$scope.$apply(function() {
vm.message = data;
});
});
hub.start().done(function () { });
有没有其他人以前见过这个或者可以解释为什么 ng-incude 中的控制器无法使用该服务?
【问题讨论】:
-
无耻插件,你可以看看这个:github.com/roylee0704/angular-signalr
标签: javascript asp.net angularjs signalr signalr-hub