Дополнительно
Как создать модальное всплывающее окно, совместимое с Angular 4
Я хочу иметь возможность создать всплывающее окно, которое будет загружать определенный мой компонент Angular 4 при выборе переключателя.
Похоже, что методы, перечисленные в ответах на этот вопрос [https://stackoverflow.com/questions/35400811/how-to-use-codes-to-open-a-modal-in-angular-2) совместимы только с Angular 2.
Я не уверен, с чего начать, и был бы признателен за любую помощь!
19
2
Принятый ответ добавляет большую зависимость от мухи. Модальные (и безмодели) диалоги в значительной степени являются результатом одного или двух классов CSS. Попробуйте это "переименовать..."пример:
Родительский HTML, который использует
< my-modal >
dild:Родительский класс. Декоратор
@ Component
опущен для краткости. (Свойствоname
принадлежит родительскому классу и будет существовать, даже если у нас не будет формы для его изменения.)Детский, чтобы быть-модальным компонентом.
@ Component
декоратор и импорт снова опущены.Детский HTML перед модальным его.
modal
и предназначенный для элемента< div >
.Но «модальный» класс CSS не помешает взаимодействовать со страницей под ним. (Так что технически это создает диалог без моделей.) Таким образом, мы помещаем «наложение» под модалом, чтобы поглощать и игнорировать активность мыши.
overlay
также предназначен для элемента< div >
.modal
иoverlay
в дочернем HTML .И это все. В основном 2 класса CSS, и вы можете сделать любой компонент модальным. Фактически вы можете показать компонент в строке или как модальный во время выполнения, просто изменив существование класса CSS с помощью
ngClass
или[class.modal] = "showAsModalBoolean"
.Вы можете изменить это, чтобы ребенок контролировал логику шоу / скрытия. Переместите функцию * ngIf, showIt и show () в дочернее устройство. В родительском списке добавьте
@ViewChild (MyModalComponent) renameModal: MyModalComponent;
, и тогда родитель может обязательно вызватьthis.renameModal.show (this.name);
и повторно подключить инициализацию и содержать дели по мере необходимости.Ребенок-модальный может возвращать информацию в функцию родителя, как показано выше, или метод
show ()
ребенка может вместо этого принять обратный вызов или вернуть обещание по вкусу.Две вещи, чтобы знать:
this.renameModal.show (..);
не будет работать, если есть ngIf на< my-modal >
, потому что он не будет существовать, чтобы раскрыть функцию с самого начала. ngIf удаляет весь компонент, функцию show () и все, поэтому используйте[hidden]
, если вам это нужно по какой-то причине.У модалов на моделях будут проблемы с z-индексом, поскольку все они имеют один и тот же z-индекс. Это можно решить с помощью
[style.z-index] = "calculatedValue"
или аналогичного.Проверьте Angular Material Dialogue, вот [Plunker][2]
[2]: https://plnkr.co/edit/Dh9INs7QZPatSyhHywJc?р = предварительный просмотр