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

时间:2013-02-26 21:50:11

标签: javascript angularjs service controller share

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

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

2 个答案:

答案 0 :(得分:8)

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

你应该:

答案 1 :(得分:0)

https://www.youtube.com/watch?v=HXpHV5gWgyk#t=29

这家伙用一种非常简单的方式解释了它。