【问题标题】:How to pass an object using $rootScope?如何使用 $rootScope 传递对象?
【发布时间】:2014-02-16 06:24:49
【问题描述】:

我有一个名为 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.
})

【问题讨论】:

    标签: angularjs callback angularjs-scope


    【解决方案1】:

    1) 如果您的控制器是父子控制器,并且您从子控制器发出事件,您只需要 $emit 事件,父控制器只需使用 $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 侦听给它的子级。这个方法可以写在 Angular 模块的 .run 块中

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

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

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

    对该事件感兴趣的范围可以订阅它:

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

    【讨论】:

      【解决方案2】:

      你必须这样做

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

      以及你想捕捉的地方

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

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 2012-05-16
        相关资源
        最近更新 更多