javascript - Angular 2: NgbModal transkludera i vy
Säg att jag har en sådan modal mall:
<div class="modal-header">
<h3 [innerHtml]="header"></h3>
</div>
<div class="modal-body">
<ng-content></ng-content>
</div>
<div class="modal-footer">
</div>
och jag anropar denna modal från en annan komponent så:
const modalRef = this.modalService.open(MobileDropdownModalComponent, {
keyboard: false,
backdrop: 'static'
});
modalRef.componentInstance.header = this.text;
Hur kan jag lägga in html med bindningar etc. i NgbModal? I ng-content
Svar #1
Du kan få en referens till komponentinstansen från NgbModalRef som returneras av open-metoden och sätta bindingen där.
här är en metod som öppnar modalen:
open() {
const instance = this.modalService.open(MyComponent).componentInstance;
instance.name = 'Julia';
}
och här är komponenten som kommer att visas i modalen med en input-bindning
export class MyComponent {
@Input() name: string;
constructor() {
}
}
===
Du kan också skicka en templateRef som input. Låt oss säga att föräldrakomponenten har
<ng-template #tpl>hi there</ng-template>
export class AppComponent {
@ViewChild('tpl') tpl: TemplateRef<any>;
constructor(private modalService: NgbModal) {
}
open() {
const instance =
this.modalService.open(MyComponent).componentInstance;
instance.tpl = this.tpl;
}
}
och MyComponent:
export class MyComponentComponent {
@Input() tpl;
constructor(private viewContainerRef: ViewContainerRef) {
}
ngAfterViewInit() {
this.viewContainerRef.createEmbeddedView(this.tpl);
}
}
