在其他控制器中更新变量

时间:2013-09-12 06:58:33

标签: angularjs

我有一个带有模式的表单的页面。当模态中的表单准备就绪时,我需要关闭模态并在页面上显示一条消息。我希望页面和模态是独立的控制器,因为它们有不同的职责。我发现有两种方法可以通知页面表单已准备就绪:

  1. 创建一个服务,两个控制器都被注入并调用该方法
  2. 使模态控制器成为页面控制器的子级,让它们共享一个对象,如下所示:http://fdietz.github.io/recipes-with-angular-js/controllers/sharing-models-between-nested-controllers.html
  3. 关于范围的Angular文档似乎说控制器不应该共享变量而是使用服务,但在这种情况下,这真的是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

使用服务共享有关控制器的信息,但不是将控制器注入服务,而是将服务注入控制器。此外,如果要保持视图与数据之间的绑定,则需要使用对象而不是原始变量。

angular.module("MyApp", [])
.factory("Data", function() {
  return { msg: "Shareable/Bindable data" }
})
.controller("One", function($scope, Data){
  $scope.foo = Data;
})
.controller("Two", function($scope, Data){
  $scope.bar = Data;
})

在这个例子中,我可以直接返回数据,而不是将其包装在我的服务上的对象中。但是,如果我们这样做(return "..."$scope.foo = Data),变量{{foo}}{{bar}}只会有工厂信息的“影子”副本。因此,我们需要在视图和消息包装中使用{{foo.msg}}

完整示例位于Codepen.io。删除{ msg }并返回字符串,看看我的意思。