angular ui-router のスコーピングの問題だと思いますが、よくわかりません。
angular.module('Meeting').controller('MeetingController', ['$scope', 'signalRService', '$stateParams', function ($scope, signalRService, $stateParams) {
$scope.setMeetings = function(meetings) {
$scope.meetings = meetings.map(function(meeting) {
return {
id: meeting.CategoryId,
name: meeting.MeetingName
};
});
$scope.$apply();
};
$scope.connectToSignalR = function () {
signalRService.connect();
signalRService.registerAddMeetingsClientMethod($scope.addMeetings);
};
$scope.requestMeetings = function() {
signalRService.requestMeetings($stateParams.departmentId);
};
$scope.connectToSignalR();
$scope.eventId = $stateParams.eventId;
}]);
基本的に、私のモジュールには signalR サービスが挿入され、コールバックを登録して会議を設定します。ビューにボタンがあり、signalR サービスに会議を取得するよう指示します。これにより、登録したばかりのコールバックが呼び出されます。現在、これはすべて ui-router で正常に機能しますが、ページが最初に読み込まれたときのみです。ここに私のルーティング設定があります:
angular.module('Meeting')
.config(
['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state("meeting",
{
url: "/meeting/:departmentId/",
templateUrl: '/home/meetingPage',
controller: "MeetingController"
})
.state("meeting.members",
{
url: "/members/",
templateUrl: "/home/memberspage",
controller: "MeetingMemberController"
})
.state("meeting.edit", {
url: "/meetingedit",
views: {
'meetingtime': {
templateUrl: '/home/timepage',
controller: 'MeetingTimeController'
},
'location': {
templateUrl: '/home/locationpage',
controller: 'MeetingLocationController'
}
}
});
}]);
会議の状態 (つまり、mysite/meeting/3) を読み込むと、すべての signalR メソッドが呼び出され、MeetingController の会議モデルが読み込まれ、データがビューに表示されます。
別の状態 (つまり、mysite/meeting/4) に移動すると、signalR メソッドがまだ呼び出され、会議モデルが読み込まれますが、その後消えてしまいます。F5 キーを押してページを手動で更新すると、再び機能し始めますが、別のページに移動するとすべてが機能しなくなります。
別のページに移動すると、会議オブジェクトがまだ前のページから取り込まれているため、スコープの問題だと思います。