2014-10-18 3 views
2

Проблема в том, что я сначала загружаю «#/chat» мой сигнал R chat работает отлично. Но если я сначала загружу «# /», а затем маршрут в «#/chat» мой чат не работает.после использования углового маршрута SignalR не работает

Я очень новичок в сигнале 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); 
    };  

}); 

ответ

2

Во время отладки я обнаружил, что концентратор остался прикрепленным к устаревшему контроллеру, который вышел из сферы видимости. SignalR не перезапускал концентратор для нового экземпляра контроллера, который был создан при переходе на нашу страницу.

Чтобы исправить это, если вы остановили концентратор всякий раз, когда вы изменили маршрут, тогда концентратор снова начал правильно, когда вы перешли на начальную страницу.

Следующий код фиксируется вопрос:

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

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

Для получения дополнительной информации GO в этом LINK

0

Я думаю, что у вас есть ошибка в вашем относительном пути файлов js.

<script src="Scripts/jquery-1.10.2.min.js"></script> 
<script src="Scripts/jquery.signalR-2.1.0.min.js"></script> 
<script src="signalr/hubs"></script> 

Попробуйте использовать абсолютный URL для тестирования:

<script src="http://localhost:your_port/signalr/hubs"></script> 

Есть ли у вас исключение во время Js отладки? Могу ли я увидеть вашу html-страницу (с ссылкой js)?