1

每次加载任何 Angular 控制器时,我都想运行一个函数。

我发现的最好方法是将此处理程序附加到我网站上加载的第一个控制器中:

$rootScope.$on('$stateChangeSuccess', 
  function(event, toState, toParams, fromState, fromParams){
    myFunction();
  }
);

有更好的选择吗?

4

2 回答 2

1

如果您只想在每次加载控制器时执行一个函数,则以下内容就足够了。

var init=function(){
  //your code goes here
}
init();

但在大多数情况下,您需要仅在加载特定页面(路由)时执行函数。在这种情况下,请使用以下内容。

if ($location.url() == "/your/page/url")
{
  //Your function code or function call goes here 
}

编辑:对于您的特定需要,可以在 Angular $http 拦截器中有效地处理 Google Analytics 的代码。参考Angular $http 拦截器

于 2015-07-28T03:44:19.973 回答
0

我宁愿将该功能移到您的$stateProvider. 您的状态配置可能看起来像

.config(['$stateProvider', function($stateProvider) {

  $stateProvider
  .state('myRoute', {
    url: '/myUrl',
    templateUrl: '/template.html',
    controller: 'MyController',
    controllerAs: 'vm',
    resolve: {
      dummyVariable: function(MyService, $stateParams) {

        MyService.functionToBeCalled();

        return true;
      }
    }
  });
于 2015-07-28T03:57:35.970 回答