[英]AngularJS + Signalr not connecting to hub when controller is in a ng-include
當控制器位於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>
調試此服務初始化操作將觸發3次,但服務器端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中的控制器無法使用該服務?
我認為您可能有兩個不同的問題:
.start()
之前在SignalR代理上定義.on
處理程序,這應該有助於解決OnConnected
服務器端缺少的調用(聽起來很奇怪,我知道,但是嘗試一下) ngInclude
引入了一個隔離的作用域,因此那里還有一個級別的作用域,這可能會引起問題。 而且,為了將事件從父范圍發送到子范圍,您應該使用$broadcast
( 在此處檢查) 兩者都是我看到的第一印象,您可能想嘗試一下,但是我沒有做任何測試...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.