Reputation: 715
Okay, I have my modal set up like this. Please remember that I am working in a Component Library not just the application.
Inside my Component Library...
I have my template
<div class="modal-header">
<h4 class="mt-3">
{{header}}
</h4>
<button id="messageModalClose" type="button" class="close" aria-
label="Close"
(click)="closeModal()">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
{{message}}
</div>
and Component
import { Component, OnInit, ViewEncapsulation, Input } from '@angular/core';
import { NgbModal, NgbModalOptions, NgbActiveModal } from '@ng-bootstrap/ng-
bootstrap';
@Component({
selector: 'ms-modal',
templateUrl: './ms-modal.component.html',
styleUrls: ['./ms-modal.component.scss'],
//encapsulation: ViewEncapsulation.None,
})
export class MsModalComponent implements OnInit {
@Input() header: string;
@Input() message:string;
private _modalOptions: NgbModalOptions = {
backdrop: 'static',
keyboard: false,
size: 'lg',
centered: true
};
constructor(public activeModal: NgbActiveModal) { }
ngOnInit() {
}
closeModal() {
this.activeModal.close();
}
}
I import my component into my app module import {msModalModule } from 'ms-components';
I add 'msModalModule' to the @NgModule imports array and also add the component referenced by the module to entryComponents
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
HttpClientModule,
FormsModule,
msModalModule
],
bootstrap: [AppComponent],
entryComponents:[MsModalComponent]
})
export class AppModule {}
Now in my app.component.ts I add a function to handle opening the Modal and pass in the input values
OpenModal(header,message){
***NgbModalOptions is optional
const modalOptions: NgbModalOptions = {
backdrop: 'static',
keyboard: false,
size: 'lg',
centered: true,
};
const modalRef = this.modalService.open(MsModalComponent,modalOptions)
modalRef.componentInstance.header = header;
modalRef.componentInstance.message = message;
}
So instead of just passing string values I would like to pass/display HTML and controls in the refModal to make it more useful...I've heard of "transclusion" for this but only find AngularJS examples...is this right? any other ideas?
Upvotes: 0
Views: 1601
Reputation: 715
It doesn't look like you can pass form controls to ng-bootstrap modal.
I did however alter my "modal-body" so that text or HTML can be passed. This will only interpret html style tags like (bold) as an example...It will not interpret control tags like or
Using "innerHTML" this is what that looks like.
<div class="modal-header">
<h4 class="mt-3">{{header}}
</h4>
<button id="messageModalClose" type="button" class="close" aria-label="Close" (click)="closeModal()">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" [innerHTML]=message>
</div>
Upvotes: 0
Reputation: 11243
If you just wish to have body part as html. You can use <ng-content></ng-content>
<div class="modal-header">
<h4 class="mt-3">
{{header}}
</h4>
<button id="messageModalClose" type="button" class="close" aria-
label="Close"
(click)="closeModal()">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<ng-content></ng-content>
</div>
Use of modal component
<ms-modal><h1> This is modal content area </h1></ms-modal>
Upvotes: 1