6

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

控制器 1

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

WelcomeCtl.$inject = [$scope, emailService];

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

控制器 2

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

SignupCtl.$inject = [$scope, emailService];

出于测试目的,我使用 window.alert 来显示 getEmail() 的值

电子邮件服务

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”</p>

当我在代码中添加更多 window.alert 函数以查看发生了什么时,我看到调用 save() 时,控制器 1 执行并将值保存到服务中,并且 express.js 加载下一页。然后 Controller2 激活。当控制器 2 激活时,它会重新初始化服务,将文本设置回“起始值”。然后当 getEmail 被调用时,它返回值“起始值”</p>

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

咨询资源。
更好的设计将数据传递给其他 ng-view 并跨控制器持久化

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

4

2 回答 2

8

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

您应该:

于 2013-02-26T22:19:15.167 回答
0

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

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

于 2014-09-17T11:31:29.707 回答