使用角服务共享控制器之间进行数据(Using angular service to share da

2019-07-20 14:30发布

我想有两个不同的控制器相互通信。

控制器1

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

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

该控制器被设计为采取从文本字段中的文本(以纳克模型=“电子邮件”),并把文本转换为服务(emailService),所以它可在下一NG-视图(其由下一个控制的被使用控制器)//用于测试目的,我只是把“嗨”直接进入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;
              }
          };
      });

由于作为与此服务指定使用控制器1和控制器2的结果,window.alert打印出“开始值”而不是“您好”

当我把更多的window.alert功能的代码,看看发生了什么我看到,当保存()被调用时,控制器1个执行并保存的值到服务和express.js加载下一页。 然后,控制器2激活。 当控制器2激活它重新初始化服务,将文本回“启动值”。 然后,当getEmail叫其返回值“启动值”

这混淆了我,因为我是那个服务是每次都包含在控制器时间未初始化的印象。

咨询资源。
将数据传递到其他NG-视图的和跨控制器坚持它更好的设计

我也工作过的角度,明确种子的 https://github.com/btford/angular-express-seed

Answer 1:

Angular.js只适用,并保持在一个页面上的数据。 如果你的页面重新加载(如你似乎表明,当你说“express.js加载下一页”,然后将其重新初始化一切。

你应该:

  • 看看如何使用Angular.js路由( http://docs.angularjs.org/tutorial/step_07 ,让你留在同一页上)。
  • 使用的东西,以保存数据,如localstorage 。 了解更多: http://diveintohtml5.info/storage.html


Answer 2:

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

这家伙在一个非常简单的方法来解释它。



文章来源: Using angular service to share data between controllers