2013-04-05 3 views
0

업데이트 : 오류 사례를 단순화하고 SignalR의 GitHub 페이지에 문제를 제기했습니다. 여기서 문제를 볼 수 있습니다 : https://github.com/SignalR/SignalR/issues/1828. 실제로이 버그는 AngularJS와는 아무런 관련이 없습니다.SignalR 콜백 교체가 작동하지 않습니다.

저는 ASP.NET과 SignalR을 백엔드에, AngularJS를 프론트 엔드로 사용하는 프로젝트를 가지고 있습니다. AngularJS 내에서 움직이고 콘트롤러가 다시 생성되면, 원래의 SignalR 콜백 메소드를 대체 할 수 없습니다.

function SignalRProblemCtrl($scope) { 
    var bar = $.connection.bar; 
    $.connection.hub.start(); 

    $scope.currentMessage = ""; 

    $scope.messages = []; 
    $scope.messages.push("HELLO!"); 

    var date = new Date(); 
    bar.client.addMessage = function (message) { 
     $scope.$apply(function() { 
      console.log("Callback set on " + date + ": " + message); 
      $scope.messages.push(message); 
     }); 
    }; 

    $scope.send = function() { 
     bar.server.send($scope.currentMessage, "Extra data"); 
    }; 

} 
SignalRProblemCtrl.$inject = ['$scope']; 

이 컨트롤러에 처음 방문에서 내가 보내고 메시지와 내 모든 각도 바인딩이 잘 작동을받을 수 있습니다 : 여기

내 컨트롤러에 대한 코드입니다. 내 콘솔의 출력 :

Callback set on Fri Apr 05 2013 14:37:13 GMT+0300 (E. Europe Daylight Time): First page load controllers.js:37 

이것은 모두 훌륭하고 멋쟁이입니다. 문제는 다른 페이지로 이동하여 SignalRProblemCtrl을 다시 방문한 후에 발생합니다. 이번에는 메시지를 보내고받을 수 있지만 메시지는 콘솔에 쓰여 지지만 바인딩은 업데이트되지 않습니다. 근본 원인에 콘솔 포인트 출력 : 그래서 내 바인딩 때문에 처음 콜백 교체되지 않습니다 컨트롤러의 두 번째 창조에 업데이트되지 않는

Callback set on Fri Apr 05 2013 14:37:13 GMT+0300 (E. Europe Daylight Time): Second page load controllers.js:37 

. 모든 SignalR 메시지는 여전히 컨트롤러의 이전 인스턴스의 $ scope가있는 첫 번째 콜백으로 이동하므로 내보기가 최신 메시지로 업데이트되지 않습니다.

왜 이런가요? 왜 SignalR은 첫번째 콜백을 유지합니까?

추신. 나는 또한 콜백을 즉시 교체하려고 시도했다. 이 코드를 사용하면 최신 콜백 (date2가있는 콜백)이 올바르게 사용됩니다.

var date = new Date(); 
bar.client.addMessage = function (message) { 
    $scope.$apply(function() { 
     console.log("Callback set on " + date + ": " + message); 
     $scope.messages.push(message); 
    }); 
}; 

var date2 = new Date(); 
bar.client.addMessage = function (message) { 
    $scope.$apply(function() { 
     console.log("Callback set on " + date2 + ": " + message); 
     $scope.messages.push(message); 
    }); 
}; 
+0

[? 연결이 시작된 후 클라이언트 기능을 추가 할 수 Signalr (1.0.0 - 알파 2) 허브]의 중복 가능성 :

당신은 해결책을 확인하실 수 있습니다/questions/13497390/signalr-1-0-0-alpha2-hubs-can-you-add-client-functions-after-connection-has) –

답변

관련 문제