<button (click)="reuseModal.open()">Open</button>
<app-modal #reuseModal>
<ng-template #header></ng-template>
<ng-template #body>
<app-my-body-component>
<!-- This component will be created only when modal is visible and will be destroyed when it's not. -->
</app-my-body-content>
<ng-template #footer></ng-template>
</app-modal>
9 回答
这是一个很好的例子,说明如何在GitHub上的Angular2应用程序中使用Bootstrap模式 .
它的要点是你可以在组件中包装bootstrap html和jquery初始化 . 我创建了一个可重用的
modal
组件,允许您使用模板变量触发打开 .您只需要安装npm包并在app模块中注册模态模块:
Angular 2及以上
Bootstrap css(保留动画)
NO JQuery
NO bootstrap.js
支持 custom modal content (就像接受的答案一样)
最近添加了对 multiple modals on top of each other 的支持 .
`
To show the backdrop ,你需要这样的CSS:
The example now allows for multiple modals at the same time . (参见
onContainerClicked()
方法) .For Bootstrap 4 css users ,您需要进行1次小改动(因为从Bootstrap 3更新了css类名) . 这一行:
[ngClass]="{'in': visibleAnimate}"
应更改为:[ngClass]="{'show': visibleAnimate}"
为了演示,这里是 plunkr
现在作为NPM包提供
angular-custom-modal
@Stephen Paul continuation ......
Angular 2及以上Bootstrap css(保留动画)
没有JQuery
没有bootstrap.js
支持自定义模态内容
支持多个模态 .
Moduralized
Disable scroll when modal is open
Modal gets destroyed when navigating away.
Lazy content initialization, which gets ngOnDestroy(ed) when the modal is exited.
Parent scrolling disabled when modal is visible
延迟内容初始化
Why?
在某些情况下,您可能不希望模态在关闭后保持其状态,而是恢复到初始状态 .
Original modal issue
将内容直接传递到视图实际上会在模态获取之前初始化它 . 即使使用
*ngIf
包装器,模式也无法杀死此类内容 .Solution
ng-template
.ng-template
在被命令之前不会渲染 .我-component.module.ts
我-component.ts
modal.component.ts
modal.component.html
References
我不得不说,如果没有关于网络的优秀官方和社区文件,就不可能实现 . 你也可以帮助一些人更好地理解
ng-template
,*ngTemplateOutlet
和@ContentChild
的工作原理 .https://angular.io/api/common/NgTemplateOutlet
https://blog.angular-university.io/angular-ng-template-ng-container-ngtemplateoutlet/
https://medium.com/claritydesignsystem/ng-content-the-hidden-docs-96a29d70d11b
https://netbasal.com/understanding-viewchildren-contentchildren-and-querylist-in-angular-896b0c689f6e
https://netbasal.com/understanding-viewchildren-contentchildren-and-querylist-in-angular-896b0c689f6e
完整的复制粘贴解决方案
modal.component.html
modal.component.ts
modal.module.ts
这是我对modal bootstrap angular2组件的完整实现:
我假设在
<body>
标签底部的主index.html文件(带有<html>
和<body>
标签)中,您有:modal.component.ts:
modal.html:
客户端编辑器组件中的用法示例:client-edit-component.ts:
客户edit.html:
当然
title
,showClose
,<mhead>
和<mfoot>
是可选参数/标签 .检查在运行时创建的ASUI对话框 . 不需要隐藏和显示逻辑 . 简单的服务将在运行时使用AOT ASUI NPM创建一个组件
尝试使用ng-window,它允许开发人员以简单的方式打开并完全控制单页面应用程序中的多个窗口,No Jquery,No Bootstrap .
可用的移民
Maxmize窗口
最小化窗口
自定义尺寸,
自定义位置
窗口是可拖动的
阻止父窗口
窗口是否居中
将值传递给chield窗口
将值从chield窗口传递到父窗口
在父窗口中收听关闭的chield窗口
使用自定义侦听器侦听resize事件
以最大尺寸打开或不打开
启用和禁用窗口大小调整
启用和禁用最大化
启用和禁用最小化
这是一种不依赖于jquery或除Angular 2之外的任何其他库的简单方法 . 下面的组件(errorMessage.ts)可以用作任何其他组件的子视图 . 它只是一个始终打开或显示的引导模式 . 它的可见性由ngIf语句控制 .
errorMessage.ts
errorMessage.html
这是一个示例父控件(为简洁起见,省略了一些不相关的代码):
parent.ts
parent.html
我使用ngx-bootstrap作为我的项目 .
你可以找到演示here
github是here
如何使用:
安装ngx-bootstrap
导入到您的模块
@NgModule({
导入:[ModalModule.forRoot(),...]
})
出口类的AppModule(){}
<div class =“modal fade”bsModal#staticModal =“bs-modal”[config] =“{backdrop:'static'}” tabindex =“ - 1”role =“dialog”aria-labelledby =“mySmallModalLabel”aria-hidden =“true”> <div class =“modal-dialog modal-sm”> <div class =“modal-content”> <div class =“modal-header”> <h4 class =“modal-title pull-left”>静态模态</ h4> <button type =“button”class =“close pull-right”aria-label =“Close”(click)=“staticModal.hide()”> <span aria-hidden =“true”>&times; </ span> </按钮> </ DIV> <div class =“modal-body”> 这是静态模态,背景点击不会关闭它 . 单击<b>&times; </ b>关闭模式 . </ DIV> </ DIV> </ DIV> </ DIV>
我最近在博客上写了这个..
我创建了一个组件可以注入的可重用服务 . 注入后,组件可以与服务进行通信,无论它是否处于脏状态并与路由器导航相关联 .
https://long2know.com/2017/01/angular2-menus-navigation-and-dialogs/ https://long2know.com/2017/01/angular2-dialogservice-exploring-bootstrap-part-2/