繁体   English   中英

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

[英]Broadcast Parent Event after Child listener loads in AngularJS

我有三个控制器-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>

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

但是有时当父事件得到广播时,我的孩子侦听器未注册(因此,孩子侦听器将无法工作)。 使用超时功能可以延迟事件广播,但它会加紧Internet连接速度。 有没有一种方法可以确保在注册我的孩子侦听器后始终触发我的广播侦听器。 以下是截至目前的以下代码

.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);
  });
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM