簡體   English   中英

控制器位於ng-include中時,AngularJS + Signalr未連接到集線器

[英]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 .start()之前在SignalR代理上定義.on處理程序,這應該有助於解決OnConnected服務器端缺少的調用(聽起來很奇怪,我知道,但是嘗試一下)
  • ngInclude引入了一個隔離的作用域,因此那里還有一個級別的作用域,這可能會引起問題。 而且,為了將事件從父范圍發送到子范圍,您應該使用$broadcast在此處檢查)

兩者都是我看到的第一印象,您可能想嘗試一下,但是我沒有做任何測試...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM