我有两个指令:
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获得了模态触发的功能,但这并不是指令之间通信的好方法。
我已经在网上搜查并尝试了很多东西,但没有找到任何似乎可以解决这个问题的东西。它似乎并不明显。
答案 0 :(得分:0)
指令是一种教授HTML新技巧的方法,它主要用于创建一些可重用的HTML组件,因此指令的功能应该是自包含的,并且它应该独立于其他指令。
例如,如果要维护多个弹出窗口,则应该使popupWindow指令由传入的模型驱动。在控制器中,您应该能够通过跟踪模型来跟踪所有popupWindows。
指令应该通过控制器相互通信,尽管你可以通过使用消息广播来实现。
希望它可以有所启发。