и при клыке не в не его оно закрываеться, в самому компоненте они window.addeventlistener ставлять и смотрять если клык не на dropdown то закрывают его? я так понял?или как то делают другие реализации?:
vue-click-outside посмотрите)
Так тоже делают.
А как еще делают? а то мне на ум только пришел навешать в компоненте слушатель в mounted
Не в mounted. А по факту активации dropdown, нет смысла лишний раз вешать глобальный обработчик. Так же по комментарию выше можно реализовать с помощью кастомной директивы. https://stackoverflow.com/questions/36170425/detect-click-outside-element
Ммм, можно в директив подать метод , и там его вызвать когда клык не в тому елементу что надо?)
Но зачем создавать новый директив,? если можно прямо в компоненте (выпадного меню) написать обработчик тот же ?
Смысл создания директивы в том чтобы была возможность переиспользования данного функционала множество раз не дублируя по факту код.
Ну тут раз только надо будет использувать код такой, 1 компонент выпадного меню, там написать обработчик такой, и просто испортировал компонент и все
Если вы предполагаете использования подобного функционала несколько раз, то лучше создать директиву, если нет, то пишите прямо в компоненте. Под "использованием несколько раз", я подразумеваю, использование этого функционала в нескольких компонентах. Сначала вы хотите на дропдаун повесить, потом на другое что-то и т.д.
Ну я понял вас, смотрел про директивы), а если не нагружать обработчик в компоненте, то будет ли хорошо) на watch навешать isActiveComponent если он true (дроп даун открытий) то добавлять обработxbr document.body.addEventListener а если isActiveComponent = false то просто удалять обработчик, а то если повешать в mounted то по сути обработчик будет ловить клык на всей страницы)
Нет смысла усложнять код. Вы вешаете обработчик @click на кнопку и указываете функцию которая и и обрабатывает этот клик. В этой функции и вешаете глобальный обработчик + добавляете проверку, существует ли обработчик уже или нет.
Ну, а потом его как удалить?) когда закрыл меню?
Вы же вешаете глобальный обработчик, вот в нем и выполняете удаление самого себя когда операция будет выполнена успешно.
А так можна? удалять обработчик в своем обрабочике?
Но я так понял надо его записать обработчик в перемену с data (Listener , и удалить через removeListener(this.Listener)? верно?
Тип того, только не в data, а лучше в methods, хотя тут как посмотреть.
Обсуждают сегодня