在两个控制器之间共享数据,不断更新

时间:2013-09-23 07:33:43

标签: angularjs factory controllers

我想使用一些工厂方法在两个控制器之间共享数据。控制器Ctrl1属于从其发送HTTP请求的第一个DIV标签,并且以流方式接收来自服务器的数据。在其他DIV标签中,我希望将该结果显示为列表(ng-repeat),随着第一个DIV中的HTTP结果更新而继续更新(同样,第一个DIV标签首先获得第二个DIV标签开始显示结果响应,第一次DIV消失)。我知道如何在控制器之间传递数据一次(例如ng-click =“pass()”),但不知道如何实现这一点。我正在寻找一个不使用$ rootScope的答案。

1 个答案:

答案 0 :(得分:0)

您应该创建一个服务来包含数据,然后将服务注入每个控制器。

例如,让我们定义一个'myService'服务,其中一个属性'foo'等于字符串'bar':

angular.module('myModule').service('myService', function() {
  this.foo = 'bar';
});

我们现在可以在控制器中使用它:

angular.module('myModule').controller('MyCtrl', function($scope, myService) {
   $scope.myService = myService;
});

现在可以像往常一样在模板中访问{{myService.foo}}ng-model="myService.foo"

然后,您可以以类似的方式在第二个控制器中使用它,当您更新任一控制器中的属性“foo”时,更改将在控制器之间保持不变。这是因为角度服务是单身。通过定义这样的服务你正在做的是创建一个单独的'myService',可以在任何你想要的地方注入,并且只会被实例化一次。

如果您需要监视控制器代码中的更改,可以像myVE.foo上一样使用$ scope。$ watch()。