我已經構建了一個指令來創建切換菜單,並且在同一頁面上多次使用同一個指令時遇到問題。同一頁面上的多個指令立即執行
這是指令:
function menuTrigger($document) {
return {
restrict: 'E',
scope: true,
link: function(scope, element, attrs) {
var
menuOpen = false,
elButton = angular.element(document.querySelectorAll(".menu-button")),
elContent = angular.element(document.querySelectorAll(".menu-content")),
elClose = angular.element(document.querySelectorAll("[menu-close]"));
var
pos = attrs.pos,
style;
if (pos == 'tl') {
style = {top: '0', left: '0', 'transform-origin': 'top left'}
} else if (pos == 'tr') {
style = {top: '0', right: '0', 'transform-origin': 'top right'}
} else if (pos == 'bl') {
style = {bottom: '0', left: '0', 'transform-origin': 'bottom left'}
} else if (pos == 'br') {
style = {bottom: '0', right: '0', 'transform-origin': 'bottom right'}
};
element.bind('click', function(e) {
e.stopPropagation();
openMenu();
});
elClose.bind('click', function(e) {
e.stopPropagation();
closeMenu();
});
$document.on('click', function() {
if (menuOpen == true) {
closeMenu();
};
});
function openMenu() {
menuOpen = true;
elContent.removeClass('menu-hide');
elContent.css(style);
setTimeout(function(){
elContent.addClass('menu-open');
}, 100);
};
function closeMenu() {
menuOpen = false;
elContent.removeClass('menu-open');
setTimeout(function(){
elContent.addClass('menu-hide');
elContent.removeAttr('style');
}, 400);
};
}
};
}
因此,舉例來說,如果我使用一個主視圖菜單,假設頂部導航欄,然後在子視圖我還有其他的菜單控制一個選擇,當我點擊一個菜單時,它們都會打開。
我該如何解決這個問題?
當我看到所有querySelectorAll,element.bind和removeClass(jQuery)代碼時,我停止查找解決方案。我認爲這是你的問題。你沒有做Angular。 –
好的,但是然後..任何建議?我是新手。 – celsomtrindade
好吧,它會變成一個長長的故事,但基本上你想用ng-class來處理添加和刪除模板中的類,單擊ng來處理點擊和子指令,這些指令通過要求它們而不是querySelector方法。很多人想學我猜;) –