0

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 を使用してモーダル発火に関する機能を持っていますが、これはディレクティブ間の通信の優れた方法とは思えません。

私はネットをトロールし、多くのことを試しましたが、これを修正するようなものは何も見つかりませんでした. 明らかではないようです。

4

1 に答える 1

0

ディレクティブは、HTML に新しいトリックを教える方法であり、主に再利用可能な HTML コンポーネントを作成するために使用されます。したがって、ディレクティブの機能は自己完結型であり、他のディレクティブから独立している必要があります。

たとえば、複数のポップアップ ウィンドウを維持したい場合は、popupWindow ディレクティブを、渡されたモデルによって駆動されるようにする必要があります。コントローラーでは、モデルを追跡することですべての popupWindows を追跡できる必要があります。

メッセージブロードキャストを使用して実現できますが、ディレクティブはコントローラーを介して互いに通信する必要があります。

それがいくつかの光を当てることができることを願っています。

于 2013-08-09T20:46:00.810 に答える