在AngularJS中,在子监听器加载后广播父事件

Broadcast Parent Event after Child listener loads in AngularJS

本文关键字:广播 事件 加载 监听器 AngularJS      更新时间:2023-09-26

我有三个控制器- 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和没有找到一个合适的解决方案在线。请指导。提前感谢:)

也许最好的解决方案是@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);
  });
})