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);
  }
}

Relaterade artiklar