在满足HTTP请求之前阻止控制器运行?

时间:2015-04-13 18:51:40

标签: javascript angularjs http promise

$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams){
    if ($rootScope.carNameMap) {
        _import.stateEvent.changeTitle(toState, toParams, event);
    } else {
        _import.getCompanies.init().then(function(res){ //<-- promise
            _import.stateEvent.changeTitle(toState, toParams, event);
        });
    }
});

正如您所看到的,在我的$stateChangeStart中,我检查是否已创建carNameMap,如果不是,我运行发送HTTP请求的服务,并返回一个承诺。

但是当我有一个远程数据库时,我的控制器会在http request结束之前运行。

如何在满足HTTP请求之前阻止控制器运行?

1 个答案:

答案 0 :(得分:0)

您应该查看angularJs在配置块中的$ routeProvider中提供的resolve functionallity:

app.config(function ($routeProvider) {
  $routeProvider
    .when('/',
    {
      templateUrl: "app.html",
      controller: "AppCtrl"
      resolve: {
        foo: function ($q) {
            //your logic goes here, and then your controller will receive an "foo" parameter.
        }
      }
    }
  )
});