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

use*_*481 6 javascript service share controller angularjs

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

控制器1

function WelcomeCtl($scope, emailService) {
    $scope.save=function(){
        emailService.saveEmail(‘Hi’);
        }
}

WelcomeCtl.$inject = [$scope, emailService];
Run Code Online (Sandbox Code Playgroud)

此控制器用于从文本字段中获取文本(使用ng-model ='email')并将文本放入服务(emailService),以便可以在下一个ng-view中使用(由下一个视图控制)控制器) //出于测试目的我只是将'Hi'直接放入saveEmail函数中

控制器2

function SignupCtl($scope, emailService) {                                           
    window.alert(emailService.getEmail())
}

SignupCtl.$inject = [$scope, emailService];
Run Code Online (Sandbox Code Playgroud)

为了测试目的,我使用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;
              }
          };
      });
Run Code Online (Sandbox Code Playgroud)

由于使用此服务指定的Controller1和Controller 2,window.alert打印出"起始值"而不是"嗨"

当我在代码中添加更多window.alert函数以查看发生的情况时,我看到当调用save()时,Controller 1执行并将值保存到服务中,express.js加载下一页.然后Controller2激活.当Controller 2激活它时,重新初始化服务,将文本设置回"起始值".然后当调用getEmail时,它返回值"start value"

这让我感到困惑,因为我的印象是,每次将控件包含在服务器中时,服务都没有初始化.

咨询资源.
更好的设计,用于将数据传递到其他ng-view并将其持久化到控制器上

我也在使用angular-express-seed https://github.com/btford/angular-express-seed

Pas*_*cle 8

Angular.js只能在单个页面上工作并保存数据.如果您的页面重新加载(正如您似乎在说"express.js加载下一页"时那样,那么它会重新初始化所有内容.

你应该: