0

我有两个指令:

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');
            };
        }
    }
});

这个想法是对于所有可能的实例只有一个模态popUpWindow

我不知道如何让这两个人互相交谈。如何获取我的模态并将其称为打开和关闭函数?我应该把打开和关闭功能、控制器或链接放在哪里?看起来像控制器,但链接可以访问element.. 我应该寻找模态的实例还是有一些简洁的 Angular 方法可以做到这一点?

我在弹出窗口上使用 $emit 有一个模式触发功能,但这感觉不是指令之间通信的好方法。

我已经在网上搜寻并尝试了很多东西,但没有找到任何似乎可以解决此问题的方法。这似乎并不明显。

4

1 回答 1

0

指令是一种教授 HTML 新技巧的方法,它主要用于创建一些可重用的 HTML 组件,因此指令的功能应该是自包含的,并且应该独立于其他指令。

例如,如果您想维护多个弹出窗口,您应该使 popupWindow 指令由传入的模型驱动。并且在您的控制器中,您应该能够通过跟踪模型来跟踪所有 popupWindows。

指令应该通过控制器相互通信,尽管您可以通过使用消息广播来实现它。

希望它可以提供一些启示。

于 2013-08-09T20:46:00.810 回答