问题是如果我第一次加载"#/ chat"我的信号R聊天工作完美。但如果我第一次加载"#/"然后路由到"#/ 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);
};
});
答案 0 :(得分:2)
调试时发现集线器仍然附着在超出范围的陈旧控制器上。 SignalR没有重新启动您导航回我们页面时创建的控制器新实例的集线器。
为了解决此问题,如果您在更改路径时停止了集线器,则当您导航回初始页面时,集线器会再次正确启动。
以下代码修复了此问题:
app.run([
'$rootScope', function ($rootScope, security) {
$rootScope.$on('$routeChangeStart', function (event, currRoute, prevRoute) {
$.connection.hub.stop();
});
}]);
详情请参阅此LINK
答案 1 :(得分: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>
尝试使用绝对网址进行测试:
<script src="http://localhost:your_port/signalr/hubs"></script>
在js调试期间你有异常吗?我能看到你的html页面(whith js reference)吗?