コントローラーからイベントを発行したいという要件があり、イベントハンドラーはディレクティブコントローラー (つまり、子コントローラー) に存在します。
以下のコードを見つけてください。
<div ng-app="myApp" ng-controller="appController">
<div test></div>
</div>
/* Fiddle to call views directive event from the view controller */
var app = angular.module('myApp', []);
app.controller('appController', function ($scope, $timeout) {
console.log('Inside Controller');
// If timeout is removed test-event handler will not be called as test controller is not yet executed by the time event was raised
//$timeout(function () {
$scope.$broadcast('test-event');
//});
});
app.directive('test', function () {
return {
restrict: 'A',
controller: function ($scope) {
console.log("Inside test directive controller");
$scope.$on('test-event', function () {
console.log("Test event fired");
});
}
};
});
上記のコードで $timeout のコメントを外すと、私のコードは正常に動作します。しかし、上記の解決策を使用するのではなく、より良い解決策を知りたいです。
私は、ビュー コントローラーと、イベント ハンドラーを備えたビュー コントローラーと、ビュー コントローラーからイベントを発行するディレクティブを持っているビューのプロジェクトにこのシナリオを持っています。