簡體   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