问题是,如果我先加载“#/ chat”,我的信号R chat会正常运行。但是,如果我先加载“#/”,然后路由到“#/ chat”,则我的聊天将无法进行。

我对Signal R非常陌生,所以我实际上并不知道这个问题。
这是我的代码:

app.js

module.config(function ($routeProvider) {
        $routeProvider.when("/", {
            controller: "ItemsController",
            templateUrl: "/templates/itemsView.html"
        });


        $routeProvider.when("/item/:id", {
            controller: "SingleItemController",
            templateUrl: "/templates/singleItemView.html"
        });


        $routeProvider.when("/login", {
            controller: "LoginController",
            templateUrl: "/templates/loginView.html"
        });

        $routeProvider.when("/chat", {
            controller: "ChatController",
            templateUrl: "/templates/chatView.html"
        });

        $routeProvider.otherwise({ redirectTo: "/" });
    });

  $(function () {
       $.connection.hub.logging = true;  //for debugg
       $.connection.hub.start();
  });

   $.connection.hub.error(function (err) {
       console.log('An error occurred: ' + err);
   });

   angular.module('ogateApp').value("chat", $.connection.chat);


ChatHub.cs

  [HubName("chat")]
    public class ChatHub : Hub
    {
        public void SendMessage(string message)
        {
            Clients.All.newMessage(message);
        }

    }


ChatController.js

module.controller("ChatController", function ($scope, chat) {

    $scope.messages = [];

    $scope.sendMessage = function() {

       chat.server.sendMessage($scope.newMessage);

        $scope.newMessage = "";
    };

    chat.client.newMessage = function (message) {
        $scope.messages.push({ message: message });
        $scope.$apply();
        console.log(message);
    };

});

最佳答案

在调试时,我发现集线器仍与超出范围的过时控制器保持连接。当您导航回到我们的页面时,SignalR不会重新启动控制器的新实例的集线器。

为了解决此问题,如果您在更改路线时停止了集线器,则当您导航回到初始页面时,集线器会再次正确启动。

以下代码解决了该问题:

app.run([
    '$rootScope', function ($rootScope, security) {

        $rootScope.$on('$routeChangeStart', function (event, currRoute, prevRoute) {
            $.connection.hub.stop();
        });
}]);


有关详细信息,请在此LINK

关于c# - 使用 Angular 路线后SignalR不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26436149/

10-13 04:51