Написать пользовательскую функцию для навигации angularjs

Итак, у меня есть навигация, в которой я хочу иметь выпадающее меню с функцией подменю. Я попробовал ng-show для показа и скрытия меню, но тогда мне пришлось бы вернуться и снова щелкнуть элемент, чтобы скрыть его. Я хочу иметь возможность щелкнуть, чтобы показать, а затем щелкнуть в любом другом месте, чтобы скрыть его.

пытаясь использовать ng-click, но не уверен, куда я должен поместить свою пользовательскую функцию, которую я хочу получить, независимо от используемого контроллера.

Я бы положил что-то подобное в директиву? Функция не вызывает html или не получает какой-либо контент, для которого обычно предназначена фабрика, она просто показывает и скрывает контент в различных событиях щелчка.

2 ответа

Вероятно, есть более сложные способы сделать это, которые могут быть более элегантными, но я нашел, что это помогло в прошлом. Предполагается, что вы загружаете JQuery до Angular так $ полон jQuery. Если вы обнаружите, что делаете это со многими различными элементами DOM, возможно, было бы более эффективно разбить это на фабрику, которая позволяет многим объектам регистрировать себя таким образом с помощью всего одной привязки к body,

app.directive('clickOffHide',function() {
    return {
        ...
        link: function(.., elem, ..) {
            $('body').click(function(evt) {
                var $elem = $(elem);
                var $target = $(evt.target);
                if($elem.is($target) || $elem.has($target).length > 0) return;
                $elem.hide();
            });
        }
    }
});

Вы можете попробовать использовать ng-blur для выпадающего элемента.

<div ng-class="dropDown" ng-blur="functionToHideElement" tabindex="100">Products</div>

Элемент div может принять событие размытия, если у него есть указанный tabindex.

Таким образом, вы можете использовать запеченную в Angular директиву, а не создавать свою собственную.

Другие вопросы по тегам