Как можно создать пользовательский выпадающий с угловой с компонентом и директивой - PullRequest
0 голосов
/ 20 мая 2019

спасибо, что прочитали меня:)

Я пытаюсь создать выпадающий компонент с угловым.Я запускаю выпадающий список из диапазона и удаляю его из директивы (clickOutOf).У меня две проблемы:

  1. , когда я запускаю раскрывающийся список, он создается и запускается следующая директива clickOutOf.Таким образом, мое раскрывающееся меню не появляется, потому что моя кнопка находится вне моего раскрывающегося списка.

  2. Когда появляется мое раскрывающееся меню, я не могу проверить, является ли цель ВХОДОМ или ВЫХОДОМ из моего раскрывающегося списка.Моя директива всегда «думает», что моя цель вне моего выпадающего списка.И так, он удаляется, когда я щелкаю в любом месте.

Вот ссылка на стек стека: https://stackblitz.com/edit/angular-nvzwjl Если вы нажмете на кнопку, появится выпадающий список

Чтобы увидеть первую проблему, просто перейдите в dropdown / dropdown.component.ts к функции close() и раскомментируйте this.active = false; => нажмите на кнопку, выпадающий список не появляется ... (Я думаю, это потому, что он появляетсяно только после этого он удаляется моей директивой ... потому что мой диапазон не относится к моему раскрывающемуся списку ... Идея исправить это?)
ОБНОВЛЕНИЕ: Я нашел решение, просто добавив этот код в раскрывающийся компонент:

openDropdwon()
{
    setTimeout(() => this.active = true);
}

Но я не очень доволен ... Не думаю, что это хорошая практика, и я думаю, что есть лучшее решение.Давайте обсудим, есть ли у вас adea:)

Чтобы увидеть вторую проблему, просто измените this.active = false в конструкторе на this.active = true.Мы видим, что раскрывающийся список появляется автоматически, но всегда исчезает (даже когда мы нажимаем на раскрывающийся список).Я думаю, это из-за * ngFor, который воссоздает компоненты перед проверкой, содержит ли блок цель ... Но я не знаю, как я могу это изменить ... Кто-то может мне помочь?

Я новичок в angular, мне очень нужна помощь благодаря вам;)

...