2つの独立したコントローラ(2つの別々のJSファイル)に2つのコードがあります。一方はAngular $scope.$broadcast
イベントをトリガーし、もう一方は$scope.$on
リスナーをトリガーします。
第1のコントローラ(ファイル)スニペット:
var Controller1 = function($scope) {
$scope.triggerMyEvent = function(){
$scope.$broadcast('triggeredEvent');
}
$scope.go = function (path) {
$location.path(path);
};
}
前記第二のコントローラ(ファイル)スニペット:
var Controller2 = function($scope) {
$scope.$on('triggeredEvent',function(event){
console.log('found triggered event');
});
}
を次のようにアプリケーションが一緒に配線されている:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/page2", {
controller : Controller2
template : "/page2.html"
})
.otherwise({
template : "<p>Error</p>"
});
});
第1コントローラindex.htmlファイルのng-controller
ディレクティブによって参照されます。そして上記の他のファイル、page2.htmlは、参照とインデックスのアクションからロードされます。
のindex.html:
<body ng-controller="Controller1">
<button ng-click="go('/page2.html')">Page 2</button>
</body>
私は$scope.$broadcast
イベントがトリガされ、このコードをロード初めてと$scope.$on
リスナーはそれをうまくキャッチします。 $scope.$on
リスナーはそれをキャッチしませんが、私はそれをリロードする場合。明確にするために、初期ロード時にイベントがトリガーされ、正常に捕捉されます。だから私のサーバーを再起動し、ページにアクセスします。しかし、私がページ(F5)をリフレッシュすると、そのイベントは解雇されているものの、捕まえられていないと考えられます。私はこれに取り組んでいないので、私は$ scope/$ rootScopeや$ broadcast/$ emit/$ onなどの情報を読んだことがあるが、知識が不足していると推測している。どんな助けもありがとうございます。私は関連する問題に関するいくつかの記事を見る。差し迫った関連性は見られない。
Angular $broadcast only updating after page refresh
AngularJS event-based communication through isolate scope
私はスコープを隔離するために、関連すると考えているが、私はまだ動作するように何かを得ることができていない最も有望参照:私はこの記事を注意しなかったが。
私たちはあなたのコードの残りの部分を参照する必要があります。これはあなたの質問に答えるだけの情報ではありません。 'triggerMyEvent'はどのように呼び出されますか?関連するテンプレートはありますか?コントローラの定義を見てみましょう –
こんにちは、私はより関連性の高いコードを追加してみます。しかし、私は単純に関数を呼び出し、コンソールロギング(上記には示されていません)を使用して、毎回トリガーされることを確認します。 – Gedalya
より完全な画像を提供するようにコードを更新しました。 – Gedalya