2014-10-18 44 views
2

問題是如果我第一次加載「#/ chat」我的信號R聊天完美工作。但如果我第一次加載「#/」,然後路線到「#/ chat」,我的聊天不起作用。使用角度路由後SignalR不起作用

我對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); 
    };  

}); 

回答

2

在調試過程中,我發現集線器仍然連接到超出範圍的陳舊控制器。 SignalR沒有重新啓動集線器,用於在導航回我們的頁面時創建的新控制器實例。

爲了解決這個問題,如果您在更改路由時停止了集線器,那麼當您導航回初始頁面時,集線器再次正確啓動。

下面的代碼解決了該問題:

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

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

詳情往這個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頁面(whith js參考)?