我试图让两个不同的控制器互相通信。
控制器1
function WelcomeCtl($scope, emailService) { $scope.save=function(){ emailService.saveEmail(‘Hi’); } } WelcomeCtl.$inject = [$scope, emailService];
该控制器旨在从文本字段中获取文本(使用ng-model =’email’),并将文本放入服务(emailService)中,以便可以在下一个ng- view(由下一个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()时,控制器1执行并将值保存到服务中,express.js加载下一页。然后,Controller2激活。激活控制器2后,它将重新初始化服务,将文本设置回“起始值”。然后,当调用getEmail时,它返回值“起始值”
这使我感到困惑,因为我的印象是每次将服务包含在控制器中时都不会初始化服务。
我也在研究angular-express-seed https://github.com/btford/angular-express- seed
Angular.js仅工作并将数据保留在单个页面上。如果您的页面重新加载(您似乎在说“ express.js加载下一页”时指出),那么它将重新初始化所有内容。
您应该:
localstorage