stateChangeSuccess
等角度的UI-Router事件在rootScope
级别被触发,因此与这些事件相关的代码大多位于RootCtrl
我有两个状态回家,约有HomeCtrl
和AboutCtrl
在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();
}
}
}
答案 0 :(得分:2)
这里的一个技巧是将该事件完全挂钩在 $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被销毁,我们就不会造成内存泄漏。