等待来自父控制器的$ scope变量被定义

时间:2015-10-27 12:53:01

标签: angularjs scope controller angular-ui-router

我有一个AngularJS控制器,它从服务加载数据(执行异步$http请求)。

在子控制器中,我需要等待加载此数据,然后才能执行另一个$http请求以加载更详细的信息。

我尝试在子控制器中执行此操作:

$scope.$parent.watch('dataLoaded', function(dataLoaded) {
  if (dataLoaded) {
    // call the service doing the subsequent $http request with data from parent controller
  }
};

当我这样做时,它在子控制器中工作,但看起来像'dataLoaded'变量(在父控制器中加载数据后从false变为true)从未在父控制器中将其值实际更改为true控制器。

我做错了什么?我应该采用完全不同的方法吗?

1 个答案:

答案 0 :(得分:4)

这里的要点是 - 我们需要一个被监视的引用(名称中为dot)。例如。的 Model: {}

所以,在父状态/视图中我们会声明它

$scope.Model = {
   dataLoaded: false,
};

子视图可以$watch模型属性更改(但不在父级上,仅在当前范围内)

$scope.$watch('Model.dataLoaded', function(dataLoaded) {
  if (dataLoaded) {
      ...
  }
};

在此处查看更多详情:

How do I share $scope data between states in angularjs ui-router?