确保每次执行控制器时都运行代码

时间:2017-07-24 16:43:46

标签: angularjs

我有一个州,我去了$ state.go

让我们调用与stateName相关联的州templateNametemplateName来电controllerName

我的印象是每次使用controllerName时都不会运行$state.go(stateName)(此印象来自controllerName内使用console.log)

到目前为止,我的'修复'是使用$scope.$on('$stateChangeSuccess' ...并检查stateName。但这感觉很脆弱:如果我改变状态的名称,我需要改变控制器内部的代码。

我的问题:

1)加载templateName时是否总是调用控制器?

2)有没有办法确保每次都调用controllerName?或者至少它内部有一些功能?

1 个答案:

答案 0 :(得分:0)

我发现一个hacky解决方案是强制$ state reload选项:

myApp.config(function ($provide) {
  $provide.decorator('$state', function ($delegate) {

    var state = $delegate;

    state.baseGo = state.go;


    var go = function (to, params, options) {
      options = options || {};

      if (angular.isUndefined(options.reload)) {
          options.reload = true;
      }

      this.baseGo(to, params, options);
    };

    state.go = go;

    return $delegate;
  });
})

这样,无论何时导航状态都会完全重新加载。