Javascript 子控制器在父控制器之前执行

Javascript 子控制器在父控制器之前执行,javascript,angularjs,angularjs-scope,angularjs-controller,Javascript,Angularjs,Angularjs Scope,Angularjs Controller,在父视图中,我使用此代码检索json文件,并在子视图中使用ng repeat来访问它 $scope.services = Services.query(); factory('Services', function($resource) { return $resource('/services/:serviceId', { serviceId: '@_id' }, {}); 在这里之前一切都很好。 当我想直接访问子视图或刷新页面时,问题就开始了。我仍然能够在视图中用

在父视图中,我使用此代码检索json文件,并在子视图中使用ng repeat来访问它

    $scope.services = Services.query();

factory('Services', function($resource) {
  return $resource('/services/:serviceId', {
    serviceId: '@_id'
  }, {});
在这里之前一切都很好。
当我想直接访问子视图或刷新页面时,问题就开始了。我仍然能够在视图中用ng repeat显示json文件的内容。但我无法使用子控制器中的文件。我在孩子身上试过这个代码,试图找出问题所在

  if($scope.services){ // in both cases it's not null
  var s="";
  if($scope.selectedService)
  s="NO refresh an NO direct access";
  else
  s="refresh or direct access";

  console.log(s);
  console.log("data : " + $scope.services);
  console.log($scope.services.length);
  console.log($scope.services)
  }
这是输出


子控制器可能在父控制器之前执行?我如何解决这个问题

本例中的问题可能是父级调用了延迟,因为它使用异步HTTP请求获取JSON

在该延迟期间,子控制器将执行

您可以通过在父控制器中添加console.log来验证:

console.log("Starting Services.query()");
$scope.services = Services.query();
然后您将看到父控制器在子控制器之前执行


解决方案是将子控制器中的逻辑更改为不依赖于创建控制器时可用的
$scope.services

没错,父控制器先于子控制器执行:/n是否有任何解决方案?我编辑并添加了建议的“解决方案”,但这个问题太广泛了,在这里无法回答。建议阅读一些AngularJS绑定和$scope.$watch。