如果$ rootScope.projects未定义,请阻止控制器启动?

时间:2015-04-18 16:21:19

标签: javascript angularjs asynchronous

我在角度应用程序的HTTP部分发送app.run请求。但问题是使用$rootScope.projects的控制器是在创建$rootScope.projects并由HTTP请求填充之前启动的。

如果$rootScope.projects未定义,我该如何阻止控制器加载?

以下是我的HTTP请求:

$http({method : 'GET', url:'https://api.parse.com/1/classes/Project', 
        headers: { 'X-Parse-Application-Id':ParseID, 'X-Parse-REST-API-Key':ParseREST}})
    .success(function(res) {
        $rootScope.projects = res.results;
    })
    .error(function(err) {
        console.log(err);
        $rootScope.projects = [];
    }); 

1 个答案:

答案 0 :(得分:0)

使用ng-controller时无法控制控制器实例化时间。使用一次性手表

var initWatcher = $rootScope.$watch('projects', function (newVal, oldVal) {
  if (newVal !== oldVal) {
    initWatcher();
    // init further 
  }
})

在控制器中 - 或者发出' init' $ rootScope上的事件并听取它。

如果是ngRoute / ui-router,您可以使用路由' resolve,这完全适用于此类事情。