0

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

  1. 创建一个服务,两个控制器都被注入并在其上调用方法
  2. 使模态控制器成为页面控制器的子节点,并让它们共享一个对象,如下所示:http: //fdietz.github.io/recipes-with-angular-js/controllers/sharing-models-between-nested-controllers。 html

关于范围的 Angular 文档似乎说控制器不应该共享变量而是使用服务,但在这种情况下,这真的是最好的方法吗?

4

1 回答 1

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 "..."and $scope.foo = Data) ,变量{{foo}}or{{bar}}将只有工厂信息的“影子”副本。因此,我们需要{{foo.msg}}在我们的视图中使用消息包装。

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

于 2013-09-12T07:21:15.547 回答