指令如何相互控制?

时间:2013-08-09 15:22:30

标签: angularjs angularjs-directive

我有两个指令:

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获得了模态触发的功能,但这并不是指令之间通信的好方法。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

希望它可以有所启发。