1

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

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

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

任何帮助表示赞赏。

编辑:

从给出的答案试过如下:

在服务页面:

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 
     }); 

不幸的是这两个没”在控制台上打印任何东西。该方法的任何问题?

回答

6

此行意味着$ rootScope(最高作用域级别)将向所有孩子(您的应用程序的作用域)广播名为“rootScope:Object”的事件。

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

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

希望它能帮助:

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

在你的孩子的范围,你可以轻松地检索此。

编辑:这里有一个codepen显示加载和使用从API显示数据广播$/$上

+0

正如我在这里所说的“myObject”是一个从api响应返回的数组,我可以在我的子作用域中使用它,并将它分配给其他数组吗? – user168983

+0

是的,你可以。我用一个简单的api调用和响应显示,基于$ broadcast/$ on做了一个小小的codepen:http://codepen.io/anon/pen/ENvjVY – JulCh

1

不知道我理解你的问题,但确实broadcast无非向下分派事件到所有子范围。

所以,在你的服务,你可能希望有类似:

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

而且在你要听此事件的地方,你就会有这样的事情:

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

希望有所帮助。

+0

它实际上更有可能具有'$ scope。 $ on..',而不是'$ rootScope。$ on ...'。另外,你的对象将是你回调的第二个参数,第一个是事件对象 –

+0

好点,@NexusDuck。我将编辑答案。 –