Показать диалоговое окно с Material Design Lite и Angular2

Я хочу показать диалог с angular2, как показано в этом примере: https://getmdl.io/components/index.html#dialog-section

Поэтому здесь я использую полифил диалога: https://github.com/GoogleChrome/dialog-polyfill

Этому полифиллу нужен диалоговый элемент прямо под телом. Для этого я создал компонент-оболочку, который прикреплен к самому тегу диалога. Этот компонент следует использовать только один раз в приложении.

Пример кода компонента (см. все в plnkr ниже):

let factory: ComponentFactory<any> = this.componentFactoryResolver.resolveComponentFactory(type);
let injector = this.viewContainerRef.injector;
this.componentRef = this.viewContainerRef.createComponent(factory, 0, injector);

let dialogElement = this.el.nativeElement;

if (!dialogElement.showModal) {
  dialogPolyfill.registerDialog(dialogElement);
}

this.renderer.invokeElementMethod(dialogElement, 'showModal');

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

Как вы можете видеть в плункере, содержимое отображается не в диалоговом окне, а прямо под тегом диалогового окна.

Какую часть мне здесь не хватает?

Что мне нужно сделать, чтобы передать аргументы вызываемому компоненту? например когда я хочу попросить пользователя удалить объект, мне нужно знать идентификатор этого объекта.

Plnkr: http://plnkr.co/edit/zZYOcgxcRINx23JhuxOk?p=preview


person Gambo    schedule 13.09.2016    source источник


Ответы (1)


Да, вам не хватает этой вещи:

@ViewChild('target', {read: ViewContainerRef}) target;

this.componentRef = this.target.createComponent(factory, 0, injector);

вместо вставки компонента рядом с тегом хоста (viewContainerRef)

См. рабочий Plunker

person yurzui    schedule 13.09.2016
comment
Большое спасибо! Есть ли у вас какие-либо предложения, как я могу передать параметр для созданного компонента? - person Gambo; 13.09.2016
comment
Вы можете использовать this.componentRef.instance.someProperty = value - person yurzui; 13.09.2016
comment
stackoverflow.com/questions/37487977/ - person yurzui; 13.09.2016