2 つのディレクティブがあります。
module.directive('modal', function () {
return {
restrict: 'A',
templateUrl: "/templates/ui/components/modal.htm",
replace: true,
link: function ($scope, element, attrs) {
console.log("Loaded modal directive.");
},
controller: function ($rootScope, $scope) {
$scope.isOpen = false;
$scope.open = function () {
$scope.isOpen = true;
};
$scope.close = function () {
$scope.isOpen = false;
};
// Global
$rootScope.$on('openModal', function () {
console.log("open"); // How to call open function here?
});
$rootScope.$on('closeModal', function () {
console.log("close"); // How to call close function here?
});
}
}
});
module.directive('popUpWindow', function () {
return {
restrict: 'A',
templateUrl: "/templates/ui/components/pop-up-window.htm",
replace: true,
transclude: true,
link: function ($scope, element, attrs) {
console.log("Loaded pop-up window directive.");
$scope.title = attrs["title"];
},
controller: function ($rootScope, $scope) {
$scope.isOpen = false;
$scope.open = function () {
$scope.isOpen = true;
$rootScope.$emit('openModal');
};
$scope.close = function () {
$scope.isOpen = false;
$rootScope.$emit('closeModal');
};
}
}
});
の考えられるすべてのインスタンスに対してモーダルは 1 つだけ存在するという考えですpopUpWindow
。
この2人がお互いに会話する方法がわかりません。モーダルを取得して、その open 関数と close 関数を呼び出すにはどうすればよいですか? 開閉機能、コントローラ、またはリンクはどこに配置すればよいですか? コントローラーのように見えますが、リンクにはアクセスできelement
ます..モーダルのインスタンスを取得する必要がありますか、それともこれを行うためのきちんとしたAngularの方法がありますか?
ポップアップウィンドウで $emit を使用してモーダル発火に関する機能を持っていますが、これはディレクティブ間の通信の優れた方法とは思えません。
私はネットをトロールし、多くのことを試しましたが、これを修正するようなものは何も見つかりませんでした. 明らかではないようです。