$ブロードキャストイベントで別のコントローラに問題が発生しました。だからここには取り引きがある。ウェブサイトのフッタには、別のコントローラがロードされています(CMSController)。また、私は、そのコントローラがロードしてCMSからヘルプセンターのデータを取得するルート '/ help'を持っています。 フッターにはこれに関連するリンクがあります。利用規約にリンクしています。そのデータを取得するには、私は '/ help'ルートに行き、getHelpPage()関数を呼び出す必要があります。それは私が取り組んでいる進行中のプロジェクト構造です。 だから私は「/ヘルプ」ルートにリダイレクトし、私はtheCMSControllerに聞いているイベントを、放送とルート変更時にコントローラが完全にロードされたことを検出しました
$scope.openHelpCenterPage = function openHelpCenterPage(slug) {
if($location.path().indexOf('/help') === -1){
$location.path('/help');
}
$rootScope.$broadcast('openHelpCenterPage', {slug: slug, from: 'footer'});
};
そしてCMSController
$rootScope.$on('openHelpCenterPage', function (event, obj) {
$scope.getHelpPage(obj.slug);
});
でgetHelpPage()を呼び出しますよフッタから問題は、これが機能していないということです。私はtheCMSControllerが何が起こっている読み込まれていないと思います。コンソールにエラーはありません。しかし
.... $タイムアウトにboradcastをPuringすることも、0秒で、問題を解決します。..
$timeout(function() {
$rootScope.$broadcast('openHelpCenterPage', {slug: slug, from: 'footer'});
},0);
しかし、tiは良い解決策であるような気がしません。他のアイデア???私はまた、openHelpCenterPageを聞いた後$ routeChangeSuccessを聞くために試してみたが、やはり、何の結果....
$rootScope.$on('openHelpCenterPage', function (event, obj) {
$rootScope.$on('$routeChangeSuccess',function(){
$scope.getHelpPage(obj.slug);
})
});
多分他の方法は、コントローラが完全にロードされるかどうかを検出しないように???? ありがとうございました。私は問題をうまく説明したいと思います。
$ rootScopeの代わりに '$ scope。$ on(...)'を使って関連スコープのイベントを待ち受けようとしてください。 $ on(...) ';あなたが '$ broadcast'の代わりに' $ emit'を使うと、何か変わるでしょう( '$ emit'のために実際に' $ rootScope。$ on'が必要です)? –
お返事ありがとうございます。残念ながら、この方法では動作しません。 – Artdark92