当前位置: 首页 > 面试题库 >

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

司寇苗宣
2023-03-14
问题内容

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

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


问题答案:

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

您应该:

  • 了解如何使用Angular.js路由(http://docs.angularjs.org/tutorial/step_07),以便您停留在同一页面上。
  • 使用诸如持久化数据之类的东西localstorage。了解更多信息:http : //diveintohtml5.info/storage.html


 类似资料:
  • 问题内容: 我想在控制器之间“绑定更改”异步数据。 我知道这可能有点令人困惑,但我希望有可能。 在以下示例中,如果我在输入中编写内容,则效果很好:http : //jsfiddle.net/Victa/9NRS9/ HTML : JS : 但是,假设我从服务器获取数据。我想像前面的示例一样“链接”数据。http://jsfiddle.net/Victa/j3KJj/ 事实是,我想避免使用“ $ b

  • 问题内容: 我有一项从服务器中获取一些客户端数据的服务: 然后在一个控制器中执行: 一切都很好。但是,我正在尝试从该服务上的另一个控制器进行监视,以在数据更改时更新其范围,而不是必须重新启动http请求: 我现在只是提醒,但从未触发过。页面最初加载时,它会发出“未定义”警报。我在控制台中没有任何错误,并且所有$ injects都很好,但是似乎从未意识到服务中的数据已更改。我在手表上做错了吗? 非常

  • 问题内容: 我正在尝试在控制器之间共享数据。用例是一个多步骤的表单,在一个输入中输入的数据以后会在原始控制器之外的多个显示位置中使用。下面和jsfiddle中的代码。 的HTML JS 任何帮助是极大的赞赏。 问题答案: 一个简单的解决方案是让您的工厂返回一个对象,并让您的控制器使用对同一对象的引用: JS: HTML: 演示: http : //jsfiddle.net/HEdJF/ 当应用程序

  • 问题内容: 我正在尝试在控制器之间共享数据。用例是一个多步骤的表单,在一个输入中输入的数据以后会在原始控制器之外的多个显示位置中使用。下面和jsfiddle中的代码。 HTML JS 问题答案: 一个简单的解决方案是让您的工厂返回一个对象,并让您的控制器使用对同一对象的引用: JS: HTML: 当应用程序变得更大,更复杂且难以测试时,您可能不希望以这种方式从工厂公开整个对象,而是例如通过gett

  • 问题内容: 我正在尝试使用从html获取用户查询。我想使用从ng-click中获取的值进行https调用。我可以在 Alert-1中 看到数据,但是在 Alert-2中 我得到了。在互联网上,我读到使用 服务 传递价值是最佳做法。如果我错了,请纠正我。 我的控制器 我的服务: 路由: 有没有更简单的方法? 问题答案: 可以使用服务。看一下,对于初学者来说很清楚: https://egghead.i

  • 问题内容: 我想知道什么是在控制器之间共享指令的好方法。我有两个指令要在具有不同配置的不同控制器中使用,首先想到的是我想到的使用方法: 这样,我可以使用子控制器中的所有功能,但是由于碰撞问题,我不太喜欢。由于您不能使用服务(不能在服务中使用$ scope),其他选择可以是其他指令或将代码放入运行块,但使用父控制器则完全相同,因此您怎么看? ? 更新 您如何看待这种方法? RIUPDATE这似乎是最