在AngularJS中加载子侦听器后的广播父事件

时间:2015-08-12 06:44:43

标签: javascript angularjs angular-broadcast

我有三个控制器 - Parent和Child1和Child2。 Child1和Child2是父控制器内的选项卡

<div ng-controller="parent">
  <!-- some HTML -->
  <div ng-controller="child1"></div>
  <div ng-controller="child2"></div>
 <!-- Keeping the code minimal for tab. Otherwise its long code -->
</div>

父控制器正在调用服务以获取一些数据,然后广播该事件。孩子听这个事件,获取数据并执行必要的事情。

但是有时我的孩子听众在父事件被广播时没有注册(因此孩子的听众不会工作)。使用超时功能来延迟事件广播,但它在慢速互联网连接时搞砸了。有没有办法确保我的儿童听众注册后我的广播听话总是被激发。以下是截至目前的代码

.controller('parent',function($scope,$timeout,someService,){
  someService.then(function(fetchData){
        $timeout(function () {
           $scope.$broadcast('someEvent',fetchData);
         },300);
  })
})
.controller('child1',function($scope){
//Some initializations
  $scope.$on('someEvent', function(event, fetchData) {
       //some work based on fetchData
  });
})

我是angularJS的新手,没有在线找到合适的解决方案。请指导。在此先感谢:)

1 个答案:

答案 0 :(得分:0)

可能最好的解决方案是@Vaibahv Shah所说的,在子控制器内的父值上添加$scope.$watch

像这样:

.controller('parent',function($scope,$timeout,someService,){
  someService.then(function(fetchData){
        $scope.fetchData = fetchData;
  })
})
.controller('child1',function($scope){
//Some initializations
  $scope.$watch('fetchData', function() {
       //some work based on fetchData
       console.log($scope.fetchData);
  });
})