我有一个调用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。
所以我认为我需要做以下其中一项,但无法理解如何做到:
答案 0 :(得分:1)
有多种方法可以解决这个问题。
最简单的方法是在控制器B更新服务数据时$rootScope.$broadcast(...)
。您在$scope.$on(...)
处听取该更改事件的其他任何地方,并更新数据。
这种方法并不是最好的,因为您最终会使用代码监听来自源代码中未知位置的广播。使维护更加困难。
更好的方法是使用适当的范围层次结构。
父指令可以调用$scope.$broadcast(...)
向所有子指令发送消息。因此,您将创建一个包含指令A的指令B.然后,指令A可以侦听指令B的更改。
有时,这不是一种可行的方法,而且指令B 必须是指令A的孩子。在这种情况下,您使用指令的require
功能。这会将A中的控制器注入指令B.当您进行更改时,您可以调用控制器A的方法来通知它更改。