2013-12-03 2 views
0

Я очень новый в Angular и имею проблему.Кнопка возврата/возврата с AngularJS

У меня есть страница со списком предметов (некоторые встречи).

AppointmentsSummary.chtml

<div class="border-section"> 
    <table> 
     <thead> 
     ... 
     </thead> 
     <tbody> 
     <tr ng-repeat="app in appts"> 
      <td> 
      <a href="#/Appointments/AppointmentsSummary/MessageHistory/{{app.patientId}}"> 
       <button type="button">Message history</button> 
      </a> 
      </td> 
     </tr> 
     </tbody> 
    </table> 
</div> 

И у меня есть контроллер для этого шаблона:

function AppointmentsSummaryController($scope, $location, AppointmentResource) { 
console.log("loaded.."); 
$scope.appts = AppointmentResource.getAll({ 
      .....(params) 
     }); 

} 

Когда я нажал на кнопку «История сообщений» на AppointmentsSummary.html - я передислоцировать на страницу MessageHistiry.html, который имеет кнопку «Назад».

<a href="#/Appointments/AppointmentsSummary"> 
    <button type="button">Back</button> 
</a> 

Когда я нажимаю эту кнопку, я возвращаюсь к списку назначений и AppointmentsControllerSummary перезагружается и $ scope.appts становится нулевым.

Для маршрутизации между страницами I использует $ routeProvider (то же самое с ниже)

$routeProvider.when(/Appointments/AppointmentsSummary/MessageHistory/:patientId', { 
         controller:'MessageHistoryController', 
         templateUrl:'Template/MessageHistory', 
         reloadOnSearch: false 

Могу ли я не перегрузить этот контроллер и сохранить мои данные областей $?

ответ

1

Вам необходимо сохранить данные в службе. Услуги - это одноточие, то есть они всегда возвращают один и тот же экземпляр и, следовательно, сохраняют состояние. Контроллеры получают повторное инстанцирование каждый раз, когда они загружаются и, следовательно, не сохраняют состояние.

myApp.factory('MyService', function() { 
    var appts = AppointmentResource.getAll({ 
     .....(params) 
    }); 

    return { 
     appts: appts 
    }; 
}); 

Тогда в контроллере, вы можете просто сделать ..

$scope.appts = MyService.appts; 

appts переменной в службе не перезагружаются при перезагрузке контроллера и данные будут сохранены. От angular docs ...

«Наконец, важно понимать, что все угловые службы являются однопользовательскими приложениями. Это означает, что на инжектор имеется только один экземпляр данной службы».

Часто при сохранении состояния проблема является единственным решением.

+0

Спасибо, но это работает неправильно для меня. Как насчет параметров? Я получаю список встреч из БД с помощью AppointmentResource (с поставщиком ресурсов $). Итак, параметры отправляются на этот ресурс из области AppointmentSummary.html. И, когда я изменяю эту область $, мне нужно перезагрузить данные. –

0

Благодаря Чарли Мартину за идею с singleton-service.

создать appointmentService

.factory('appointmentService', function (AppointmentResource, dateSharedService, doctorSharedService) { 

    appointmentService = {}; 

    appointmentService.reloadAppts = function() { 
     appointmentService.appts = AppointmentResource.getAll({ 
      filterFirstDate: dateSharedService.firstDate, 
      filterSecondDate: dateSharedService.secondDate, 
      doctorIds: doctorSharedService.doctorIds 
     }); 
    }; 

    appointmentService.appts = AppointmentResource.getAll({ 
     filterFirstDate: dateSharedService.firstDate, 
     filterSecondDate: dateSharedService.secondDate, 
     doctorIds: doctorSharedService.doctorIds 
    }); 

    return appointmentService; 
}); 

И, таким образом, это часть кода из моего контроллера:

function AppointmentsSummaryController($scope, appointmentService) { 
    $scope.appts = appointmentService.appts; 

    $scope.$on('firstDateChanges', function() { 
     appointmentService.reloadAppts(); 
     $scope.appts = appointmentService.appts; 
    }); 

    $scope.$on('secondDateChanges', function() { 
     appointmentService.reloadAppts(); 
     $scope.appts = appointmentService.appts; 
    }); 
    ..... 
} 

Когда я загружаю мой контроллер в первый, я получаю назначения по умолчанию, который будет сегодня , Если параметры смены области действия - назначениеСервис получить его от других инъецируемых услуг (dateSharedService, doctorSharedService).

Смежные вопросы