我试图让两个不同的控制器相互通信。
控制器1
function WelcomeCtl($scope, emailService) {
$scope.save=function(){
emailService.saveEmail(‘Hi’);
}
}
WelcomeCtl.$inject = [$scope, emailService];
此控制器用于从文本字段中获取文本(使用ng-model ='email')并将文本放入服务(emailService),以便可以在下一个ng-view(受控制)中使用由下一个控制器) //出于测试目的,我只是将'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()时,Controller 1执行并将值保存到服务中,express.js加载下一页。然后Controller2激活。当Controller 2激活它时,重新初始化服务,将文本设置回“起始值”。然后,当调用getEmail时,它返回值“start value”
这让我感到困惑,因为我的印象是,每次将控制权包含在服务器中时,服务都没有初始化。
咨询资源。
Better design for passing data to other ng-view's and persisting it across controllers
我也在使用棱角分明种子 https://github.com/btford/angular-express-seed
答案 0 :(得分:8)
Angular.js只能在单个页面上保存数据。如果您的页面重新加载(正如您似乎在说“express.js加载下一页”时那样,那么它会重新初始化所有内容。
你应该:
localstorage
。了解更多:http://diveintohtml5.info/storage.html 答案 1 :(得分:0)
https://www.youtube.com/watch?v=HXpHV5gWgyk#t=29
这家伙用一种非常简单的方式解释了它。