$ rootScope。$ AngularJS中的广播使用情况

时间:2016-11-25 14:41:13

标签: javascript angularjs angularjs-directive angularjs-rootscope

我正在使用一个应用程序,我在service.js中的服务结尾处有以下行。

$rootScope.$broadcast('rootScope:Object') 

Here Object是API服务的输出。如果我现在想在我的实际app.js文件中使用此Object,我该如何使用它?上面的行指定了什么以及如何在以后的页面中使用它?

感谢任何帮助。

编辑:

从给出的答案中尝试了以下内容:

在服务页面中:

this.getobject=function(){
//http api Function call with result as  response.data = resp 
$rootScope.$broadcast('rootScope:resp',resp);
}

在子范围页面中:

resp=[];
$rootScope.$on('rootScope:resp',function(resp) {
          $scope.resp=resp;
          console.log(resp);

      });
$scope.$on('rootScope:resp', function(e, params){
             console.log(params); // respobject
        });

不幸的是两个都没有在控制台上打印任何内容。方法有什么问题吗?

2 个答案:

答案 0 :(得分:6)

此行表示$ rootScope(最高范围级别)将广播名为' rootScope:Object'给所有孩子(你的应用程序的范围)。

根据https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope,您可以向$broadcast()函数添加参数,以便在您的情况下传递您的Object。 你将拥有:

$rootScope.$broadcast('rootScope:Object', myObject)

在您的子范围中,您可以使用以下方法轻松检索:

$scope.$on('rootScope:Object', function(e, params){
     console.log(params); // myObject
});

希望它有所帮助。

编辑:这是codepen显示使用$ broadcast / $ on

加载和显示来自API的数据

答案 1 :(得分:1)

我不确定我是否理解您的问题,但broadcast除了将事件向下发送到所有子范围外都没有。

因此,在您的服务中,您可能希望拥有类似的内容:

$rootScope.$broadcast('myEventNameHere', actualJavascriptObjectHere);

在你想听这个活动的地方,你会有这样的事情:

 $scope.$on('myEventNameHere', function(actualJavascriptObjectHere) { 
      console.log(actualJavascriptObjectHere); 
 });

希望有所帮助。