1

親と子1と子2の3つのコントローラーがあります。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 を初めて使用し、オンラインで適切な解決策を見つけられません。ガイドしてください。前もって感謝します :)

4

1 に答える 1

0

おそらく最良の解決策は、@Vaibahv Shahが言ったこと$scope.$watchであり、子コントローラー内から親値にaを追加します。

このような:

.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);
  });
})
于 2015-08-12T07:50:11.587 に答える