我试图让两个不同的控制器相互通信。
控制器 1
function WelcomeCtl($scope, emailService) {
$scope.save=function(){
emailService.saveEmail(‘Hi’);
}
}
WelcomeCtl.$inject = [$scope, emailService];
此控制器旨在从文本字段中获取文本(使用 ng-model = 'email')并将文本放入服务(emailService)中,以便可以在下一个 ng-view(由下一个控制控制器) //出于测试目的,我只是将“嗨”直接放入 saveEmail 函数中
控制器 2
function SignupCtl($scope, emailService) {
window.alert(emailService.getEmail())
}
SignupCtl.$inject = [$scope, emailService];
出于测试目的,我使用 window.alert 来显示 getEmail() 的值
电子邮件服务
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”</p>
当我在代码中添加更多 window.alert 函数以查看发生了什么时,我看到调用 save() 时,控制器 1 执行并将值保存到服务中,并且 express.js 加载下一页。然后 Controller2 激活。当控制器 2 激活时,它会重新初始化服务,将文本设置回“起始值”。然后当 getEmail 被调用时,它返回值“起始值”</p>
这让我感到困惑,因为我的印象是每次将服务包含在控制器中时都没有初始化服务。
咨询资源。
更好的设计将数据传递给其他 ng-view 并跨控制器持久化
我也在使用 angular-express-seed https://github.com/btford/angular-express-seed