玩弄NgbModal并想从模板代码之外的其他地方触发open方法->open(content: string | TemplateRef<any>, options: NgbModalOptions)
<button (click)="open(content)">Launch demo modal</button>)运行该方法时,代码工作得很好,当然,html文件中<template></template>
中的所有代码都工作得很好。
试着用这个来完成一些事情:
logoutScreenOptions: NgbModalOptions = {
backdrop: 'static',
keyboard: false
};
lockedWindow: NgbModalRef;
lockedScreenContent= `
<template #content let-c="close" let-d="dismiss">
<div class="modal-header" style="text-align: center">
<h3 class="modal-title">Title</h3>
</div>
<div class="modal-body">
<p>Body</p>
</div>
<div class="modal-footer">
<p>Footer</p>
</div>
</template>
`;
openLockedScreen(){
this.open(this.lockedScreenContent);
}
open(content) {
console.log(content);
this.lockedWindow = this.modalService.open(content, this.logoutScreenOptions);
this.lockedWindow.result.then((result) => {
this.closeResult = `Closed with: ${result}`;
}, (reason) => {
this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
});
}
代码运行时没有错误,并且模式的打开方式如下:
Modal without rendered content
……这不是我想要的!
也尝试过,结果完全一样:
lockedScreenContent= `
<div class="modal-header" style="text-align: center">
<h3 class="modal-title">Title</h3>
</div>
<div class="modal-body">
<p>Body</p>
</div>
<div class="modal-footer">
<p>Footer</p>
</div>
`;
我错过了什么?难道不能传递一个字符串作为“content”参数吗?
我也不知道如何使用ts文件中的templateref参数!
最佳答案
从今天起,https://ng-bootstrap.github.io/#/components/modal的open
方法具有以下特征:open(content: string | TemplateRef<any>, options: NgbModalOptions)
。从该签名中可以看到,您可以打开提供以下内容的模态:string
TemplateRef
string
类型的参数不是很有趣-实际上它主要是为了帮助调试/单元测试而添加的。用它你可以通过…好吧,一段文本,没有任何标记不是角度指令。因此,它实际上是一个调试工具,而不是在实际场景中有用的东西。TemplateRef
参数更有趣,因为它允许您传递要显示的markup+指令。您可以通过在组件模板(您计划从中打开模态的组件模板)中的某个位置执行TemplateRef
操作来获得<template #refVar>...content goes here...</template>
。因此,TemplateRef
参数非常强大,因为它允许您使用标记、指令、其他组件等。缺点是,TemplateRef
仅在您从具有模板的组件打开模式时才有用。
我的印象是,您正在寻找计划中但尚未实现的功能—能够以组件类型作为内容打开模式。它的工作原理如下:modalService.open(MyComponentWithContent)
。正如我所提到的,这是路线图的一部分,但尚未实现。您可以通过以下方式跟踪此功能https://github.com/ng-bootstrap/ng-bootstrap/issues/680