如何使用$ rootScope传递对象?

时间:2014-01-25 04:19:31

标签: angularjs callback angularjs-scope

我有一个名为saveInDB的函数。这将数据保存在数据库中。对象作为参数传递给函数。

$scope.SaveDB(iObj,function(iResult){
//after a sucessfull opreation in the DB. Now  I need iObj to be passed to other controller.
// I have used $emit method
$rootScope.$emit('saveCallback');
})

在我需要访问iObj到其他控制器的其他控制器中。我没有得到这个对象。在控制器中我有

var _save = $rootScope.$on('saveCallback',function(){
//i want same obj(which is used for saving ) to be access here.
})

2 个答案:

答案 0 :(得分:17)

1)如果您的控制器是父子,并且您从子控制器发出事件,您只需要$发出事件,而父控制器只需使用$ on来监听它。

从子控制器发出事件:

$scope.SaveDB(iObj,function(iResult){
  $scope.$emit('saveCallback',iResult); //pass the data as the second parameter
});

收听事件(在父控制器中):

$scope.$on('saveCallback',function(event,iResult){//receive the data as second parameter

});

2)如果您的控制器是兄弟姐妹

从你的控制器,你将$emit事件发送到父母的范围。

$scope.SaveDB(iObj,function(iResult){

   $scope.$emit('saveCallback',iResult);
});

您父母的范围然后听取此事件并将$broadcast收听给其子女。此方法可以写在角度模块的.run

$scope.$on('saveCallback',function (event,iresult){
    $scope.$broadcast('saveCallback',iresult);
});

或者您可以将$ rootScope注入控制器并让它广播该事件:

$scope.SaveDB(iObj,function(iResult){
   $rootScope.$broadcast('saveCallback',iResult);
});

对活动感兴趣的范围可以订阅:

$scope.$on('saveCallBack',function(event, data) {
   //access data here 
});

答案 1 :(得分:2)

你必须这样做

$rootScope.$broadcast('saveCallback',iresult);

以及你想要捕捉的地方

$scope.$on('saveCallBack',function(event, data) {
   //access data here 
});