我已經有了我認爲是角度ui路由器的範圍問題,但我不太確定。AngularJS用戶界面路由器範圍問題
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路由器正常工作,但只有第一次頁面加載。這裏是我的路由配置:
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的/會議/ 3),所有的signalR方法被調用,在MeetingController會議模型被填充,並將數據顯示在視圖。
當我導航到另一個狀態(即mysite/meeting/4)時,signalR方法仍然被調用,並且會議模型被填充,但隨後消失。如果我用F5手動刷新頁面,它將重新開始工作,但導航到其他頁面會停止所有工作。
我在想這是一個範圍界定問題,因爲當我導航到不同的頁面時,會議對象仍然從上一頁填充。
你似乎做你的SignalR實現內部數據檢索。這可能更適合用$ http或ng-resource完成。 SignalR用於客戶端和服務器之間的消息傳遞(反之亦然)。 –