一尘不染

使用角度服务在控制器之间共享数据

angularjs

我试图让两个不同的控制器互相通信。

控制器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


阅读 212

收藏
2020-07-04

共1个答案

一尘不染

Angular.js仅工作并将数据保留在单个页面上。如果您的页面重新加载(您似乎在说“
express.js加载下一页”时指出),那么它将重新初始化所有内容。

您应该:

2020-07-04