子控制器在Parent之前执行

时间:2015-07-09 15:05:17

标签: javascript angularjs angularjs-scope angularjs-controller

在我的父视图中,我使用此代码检索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)
  }

这是输出enter image description here enter image description here enter image description here

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

1 个答案:

答案 0 :(得分:0)

在这种情况下的问题可能是父调用具有延迟的$resource,因为它使用异步HTTP请求获取JSON。

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

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

console.log("Starting Services.query()");
$scope.services = Services.query();

然后您将看到父控制器在子控制器之前执行。

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