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

Hex*_*yse 5 scope controller angularjs 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
  }
};
Run Code Online (Sandbox Code Playgroud)

当我这样做时,它在子控制器中工作,但它似乎是'dataLoaded'变量(一旦在父控制器中加载数据,从false变为true)从未在父控制器中将其值实际更改为true.

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

Rad*_*ler 5

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

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

$scope.Model = {
   dataLoaded: false,
};
Run Code Online (Sandbox Code Playgroud)

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

$scope.$watch('Model.dataLoaded', function(dataLoaded) {
  if (dataLoaded) {
      ...
  }
});
Run Code Online (Sandbox Code Playgroud)

在此处查看更多详细信息:

如何在 angularjs ui-router 中的状态之间共享 $scope 数据?