我在 Angular 中创建了一个可以嵌套的手风琴指令,因此手风琴可以在其中包含子手风琴。
我想在手风琴打开和关闭时广播一个事件,以便其他指令可以监听它(例如,手风琴面板内的菜单可能会在打开手风琴面板时显示自己)。
问题是,如果在外部手风琴内部有一个嵌套的内部手风琴,我不希望将事件广播到内部手风琴的子元素,因为内部手风琴没有广播打开/关闭事件。
以防万一这没有意义,换句话说,嵌套手风琴内的元素应该能够收听它所在的手风琴广播的打开/关闭事件,而不是 DOM 树上更远的那个。
希望有一个简单的解决方案。
更新:在此处添加演示:http: //jsfiddle.net/jonhobbs/xr1kLqba/
我显然没有正确理解 $broadcast 和 $on ,因为演示活动目前根本不起作用,但应该清楚我想要做什么!
编辑:显然所有到 jsfiddle 的链接都必须附有代码,所以这里有一些。
var app = angular.module('app', []);
app.controller('MainCtrl', function($scope) {
$scope.mainMenuOpen = true;
})
.directive('myPanel', function() {
return {
restrict: 'EA',
scope: {
isOpen: '=?'
},
link: function($scope, $element, $attrs) {
$element.find('> BUTTON').bind('click', function() {
$scope.isOpen = !$scope.isOpen;
if ($scope.isOpen) {
$scope.$broadcast('panelOpened');
}
});
}
};
})
.directive('reactToPanelOpenClose', function() {
return {
restrict: 'EA',
scope: {},
link: function($scope, $element, $attrs) {
$scope.$on('panelOpened', function() {
alert("clicked");
$element.css({ 'background-color': 'red' });
});
}
};
});