Angular:如何在状态更改时调用scope方法

Angular: how do I call a scope method on state change?

本文关键字:调用 scope 方法 状态 Angular      更新时间:2023-09-26

stateChangeSuccess等的角度UI路由器事件在rootScope级别激发,因此与这些事件相关的代码大多位于RootCtrl

我有两个州,分别是HomeCtrlAboutCtrl

stateChange'about'上,我想调用AboutCtrl中的一个方法。。。我怎样才能做到这一点?

注意:我可以调用$scope.RootCtrlMethod,因为stateChangeSuccess代码是用RootCtrl编写的,但不能对AboutCtrl执行同样的操作。

示例:RootCtrl:

function($rootScope, $scope){
    $scope.someFun = function(){
        console.log("called");
    }
    $rootScope.$on('routeChangeSuccess', function(event, toState, fromState,...){
    if(toState.name == '/'){
        $scope.someFun();
        }
     }
}

这里的一个技巧是将该事件完全挂接到$scope上,而不是挂接到*$rootScope*:上

//$rootScope.$on('routeChangeSuccess', 
$scope.$on('routeChangeSuccess', 
  function(event, toState, fromState,...){
    if(toState.name == '/'){
        $scope.someFun();
        }
     }

现在我们可以访问在$scope上定义的任何方法。

但是,在这种情况下,我们需要确定,我们将清除的钩子

var removeMe = $scope.$on('routeChangeSuccess', ...
$scope.$on("$destroy", removeMe);

因此,一旦我们的$scope被破坏,我们就不会产生内存泄漏。