使用Angular服务共享和更新数据

时间:2014-12-18 13:38:18

标签: javascript angularjs

我有一个调用API的服务:

app.service("GetDivision", ["$http", function($http){

  this.division = function(divisionNumber){
    return $http.post("/api/league", {division:divisionNumber}).success(function(data){
      return data;
    });
  }

}]);

然后我有两个(或更多)控制器来调用服务:GetDivision.division(number);

现在,控制器A加载从服务获取的数据并将其显示在HTML表格或类似内容中。控制器B具有更新数据库中数据的功能。发生这种情况时,我需要更新从控制器A生成的HTML。

所以我认为我需要做以下其中一项,但无法理解如何做到:

  • 当控制器B更新数据时,告诉控制器A向服务发出新的更新数据请求。
  • 当控制器B更新数据时,还要更新包含服务中数据的变量。然后,控制器A监视服务中的变量,并更新HTML。

1 个答案:

答案 0 :(得分:1)

有多种方法可以解决这个问题。

最简单的方法是在控制器B更新服务数据时$rootScope.$broadcast(...)。您在$scope.$on(...)处听取该更改事件的其他任何地方,并更新数据。

这种方法并不是最好的,因为您最终会使用代码监听来自源代码中未知位置的广播。使维护更加困难。

更好的方法是使用适当的范围层次结构。

父指令可以调用$scope.$broadcast(...)向所有子指令发送消息。因此,您将创建一个包含指令A的指令B.然后,指令A可以侦听指令B的更改。

有时,这不是一种可行的方法,而且指令B 必须是指令A的孩子。在这种情况下,您使用指令的require功能。这会将A中的控制器注入指令B.当您进行更改时,您可以调用控制器A的方法来通知它更改。