Я сделал обычную (ul li) директиву выпадающего списка.Проверьте, является ли event.target дочерним элементом Угловой директивы (элемента)
- При нажатии этого раскрывающегося списка открывается список.
- Когда список снова нажимается, раскрывающееся меню закрывается.
- При щелчке по опции в списке опция сохраняется в модели, а выпадающее меню будет закрыто.
- При нажатии на выпадающее меню выпадающее меню закрывается.
Большая часть этого достигается с помощью следующего кода (закрывающая и открывающая часть).
scope.closeDropDown = function() {
scope.isOpened = false;
$document.unbind('click');
};
//The part for opening and closing is pressed
scope.openDropDown = function() {
if (scope.isOpened) {
//The dropdown is already opened, close it
scope.closeDropDown();
} else {
//Open the dropdown, and add an event handler to the document
scope.isOpened = true;
$document.bind('click', function (evt) {
var target = $(evt.target);
// Check if the document clicked element is a child of the directive
// ATTENTION HERE
if (!target.parents('dropdown').length) {
//Target is not a child element, close the dropdown
scope.closeDropDown();
scope.$apply();
}
});
}
};
Посмотрите внимательно на часть ВНИМАНИЕ ЗДЕСЬ.
Здесь я установил прослушиватель событий на всей странице. Использование этого дает мне следующую проблему:
Пример: при наличии нескольких выпадающих списков (в качестве примеров A и B).
- Открыть выпадающий
- выпадающего А открывает правильно
- Открыть ниспадающего B
- ниспадающего B открывает правильно
- выпадающего А получает событие документа и говорит, что прессованный элемент является child директивы выпадающего списка (что является правильным)
- выпадающий список A не закрывается s (Но я хочу, чтобы закрыть!)
Как проверить, если event.target является потомком angular.element?
Как сейчас, я проверяю, является ли event.target дочерним элементом директивы выпадающего списка (это действует только при использовании директивы 1 выпадающего списка)!
Просьба поделиться обновлениями об этом –