Использование углового сервиса для обмена данными между контроллерами
Я пытаюсь, чтобы два разных контроллера общались друг с другом.
Контроллер 1
function WelcomeCtl($scope, emailService) {
$scope.save=function(){
emailService.saveEmail(‘Hi’);
}
}
WelcomeCtl.$inject = [$scope, emailService];
Этот контроллер предназначен для извлечения текста из текстового поля (с ng-model = 'email') и помещения текста в сервис (emailService), чтобы его можно было использовать в следующем ng-представлении (которое контролируется следующим контроллер)// в целях тестирования я просто помещаю «Hi» непосредственно в функцию saveEmail
Контроллер 2
function SignupCtl($scope, emailService) {
window.alert(emailService.getEmail())
}
SignupCtl.$inject = [$scope, emailService];
Для целей тестирования я использую window.alert для отображения значения getEmail ()
emailService
angular.module('myApp.services', [])
.service('emailService', function (){
var text =”start value”;
return{
saveEmail:function (data){
text = data;
},
getEmail:function (){
return text;
}
};
});
В результате использования Controller1 и Controller 2, как указано в этом сервисе, window.alert печатает «начальное значение» вместо «Hi»
Когда я помещаю в код дополнительные функции window.alert, чтобы увидеть, что происходит, я вижу, что при вызове save () контроллер 1 выполняет и сохраняет значение в сервисе, а express.js загружает следующую страницу. Затем Controller2 активируется. Когда контроллер 2 активирует, он повторно инициализирует службу, возвращая тексту «начальное значение». Затем, когда вызывается getEmail, он возвращает значение «начальное значение»
Это смущает меня, потому что у меня сложилось впечатление, что службы не инициализируются каждый раз, когда они включаются в контроллер.
Консультируемые ресурсы.
Лучший дизайн для передачи данных в другие ng-view и сохранения их на контроллерах
Я также работаю над угловым экспресс-семенем https://github.com/btford/angular-express-seed