问题是,如果我先加载“#/ 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/