介绍
ABP 是 ASP.NET Boilerplate Project(Asp.net 样板项目)的简称,网址:http://aspnetboilerplate.com/。
ng-alain 是基于 antd 中后台前端解决方案,网址:https://ng-alain.com/。
官方网页下载的项目的angular项目是基于(AdminBSB:https://github.com/gurayyarar/AdminBSBMaterialDesign)
目的
一般情况下,弹出框的使用案例是这样的
<nz-modal [(nzVisible)]="isVisible" nzTitle="The first Modal" (nzOnCancel)="handleCancel()" (nzOnOk)="handleOk()">
<p>Content one</p>
<p>Content two</p>
<p>Content three</p>
</nz-modal>
效果如下
![](https://img.haomeiwen.com/i1397128/4e5f3e02c9bb8c4f.png)
通过控制变量 isVisible 来显示或隐藏弹出框。
如果在页面上动态展示弹出框呢?只要传入弹出框组件即可,不在父页面上显示弹出框组件。
答案是借助NzModalService
的create
方法,官方说明如下图
![](https://img.haomeiwen.com/i1397128/72259d67508e0035.png)
AppModalService
编写弹出框服务类,封装弹出组件和参数对象,代码如下
import { Injectable, Type } from '@angular/core';
import { NzModalService } from 'ng-zorro-antd';
/**
* 弹出框服务
*/
@Injectable()
export class AppModalService {
constructor(private _modalService: NzModalService) {}
/**
* 显示弹出框
* @param content 弹出框内容,可以是文本或组件
* @param componentParams 弹出框参数,一般是json对象
*/
show(content: string | Type<any>, componentParams?: object) {
const options = {
nzContent: content,
nzFooter: null,
nzComponentParams: componentParams,
};
const modal = this._modalService.create(options);
return modal.afterClose;
}
}
在模块中注册改服务类
![](https://img.haomeiwen.com/i1397128/20c0a2f35d0dcad3.png)
使用方式
-
在Module中注册弹出框类,必须在
entryComponents
注册,否则将不能打开弹出框,如下图
模块中注册
-
在需要弹出框的页面构造函数,注入
AppModalService
类
构造函数
-
调用服务类的show方法,传入弹出框组件类
调用
通过subscribe
方法接收返回数据 -
弹出框传入参数
在弹出框中,需要对参数进行@Input
注解,如下图代码
![](https://img.haomeiwen.com/i1397128/f7e5ca3af903430b.png)
传入参数的时候,只需将参数用json对象格式传入即可,见下图代码
![](https://img.haomeiwen.com/i1397128/a5cb9439148715b7.png)
运行效果
无参数
![](https://img.haomeiwen.com/i1397128/0c852eba316c2e13.png)
有参数
![](https://img.haomeiwen.com/i1397128/45dde93e04665586.png)
![](https://img.haomeiwen.com/i1397128/d45f51592b2dad02.png)
总结
通过使用NzModalService
,我们能够将弹出框进行动态显示,无需再父界面先声明组件,通过变量来控制弹出框是否显示,
对于弹出框这个功能来说,是灵活方便的。
我的公众号
![](https://img.haomeiwen.com/i1397128/9a9b8a692b08f2be.jpg)
网友评论