Angluar-模态视图构建简析(A)

栏目: 编程语言 · AngularJS · 发布时间: 5年前

内容简介:在一般的开发中,如果要创建一个模态视图,基本的思路是创建一个不可见的顶层视图,然后在需要的时候,展示这个顶层视图,那么基本的模态视图就创建完成了。在Angluar中,我们可以使用首先,简单的介绍一下CDK:

在一般的开发中,如果要创建一个模态视图,基本的思路是创建一个不可见的顶层视图,然后在需要的时候,展示这个顶层视图,那么基本的模态视图就创建完成了。

在Angluar中,我们可以使用 CDK(component dev kit) 中的 Overlay 来构建模态视图,它把模态的构建过程抽象出来,形成了一个可复用的组件。

准备工作

首先,简单的介绍一下CDK:

The Component Dev Kit (CDK) is a set of tools that implement common interaction patterns whilst being unopinionated about their presentation. It represents an abstraction of the core functionalities found in the Angular Material library, without any styling specific to Material Design. Think of the CDK as a blank state of well-tested functionality upon which you can develop your own bespoke components.

简单的翻译一下,就是:

CDK 是一个这样的 工具 集,它实现了一系列通用的交互模式,同时不会去影响他们的展示效果。它是 Angluar Material 组件库中没有特定于 Material Design 样式的核心功能的抽象。将CDK视为经过良好测试的功能的空状态,您在它上构建自己的定制组件。

如果你不使用 Angluar Material 来构建你的应用,那么需要就引入 CDK

npm i @angular/cdk --save
复制代码

引入完毕后,就可以开始我们的空状态模态框的构建。

使用Overlay

Overlay 是一个工厂类,它每次调用 create 都会创建一个 OverlayRef ,然后我们就使用 OverlayRef 来将要展示的内容附在上面(调用 attach )。

那么接下来,就要说明一下, overlayRef 创建后如何展示我们的视图。首先,我们通过以下代码来创建一个简单的 overlayRef

const overlayRef = this.overlay.create();
复制代码

创建完毕后,使用 overlayRefattach 函数来展示视图。 attach 函数接受一个参数,这个参数的类型可以是 TemplatePortal 或者 ComponentPortal

那么,这两个 Portal 的作用是显而易见,要么获取已存在的嵌入视图( TemplatePortal ),要么动态创建宿主视图( ComponentPortal )。当然,这两个 Portal 的构造过程也不尽相同。

TemplatePortal :接受两个参数,第一个参数是模板引用,第二个参数是当前的视图容器。

ComponentPortal :接受一个参数,其为组件构造函数。 很显然动态创建组件需要在 module 或者宿主组件的 entryComponents 属性添加需要的被创建组件。

创建完后,代码如下:

// Template形式
@ViewChild('someTemplate')
templateRef: TemplateRef;
...
const portal = new TemplatePortal(templateRef, viewContainerRef);
overlayRef.attach(portal);

// component的形式
const portal = new ComponentPortal(YourComponent);
overlayRef.attach(portal);
复制代码

构建可复用Overlay

通过依赖注入的方式,我们可以引入Overlay到一个可注入服务或者组件中。这里,为了抽象,引入 Overlay 到一个可注入服务—— ModalService

export class ModalService {
	constructor(private overlay: Overlay) {}
}
复制代码

就要构建一个通用的调用方法:

// 这里要注意,`TemplatePortal`第二个参数在要视图组件中通过依赖注入才能拿到正确的引用。
// 原因也很简单,Angular的`Service`是通过`Injector`来构建的,
// `Injector`会在应用初始化的时候创建,
// 此时`Service`已经生成,而`ViewContainerRef`仍未生成,从而导致依赖错误。
// 所以,我们把`ViewContainerRef`当作参数,而不能当作注入对象。
openTemplate<T>(templateRef: TemplateRef<T>, viewContainerRef: ViewContainerRef) {
    const config = new OverlayConfig();
    // ...setup your config
    const overlayRef = this.overlay.create(config);
    const portal = new TemplatePortal(templateRef, viewContainerRef);
    overlayRef.attach(portal);
    return overlayRef;
}
复制代码

这样,一个通用的 ModalService 就构建完毕了。

总结

简单的介绍了如何使用 Overlay ,以及一个简单的可复用 ModalService 的构建。希望能够对你了解整个 Overlay 的使用过程有所帮助,下一篇将介绍如何构建可复用的 ModalComponent


以上所述就是小编给大家介绍的《Angluar-模态视图构建简析(A)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

知识的边界

知识的边界

[美] 戴维·温伯格 / 胡泳、高美 / 山西人民出版社 / 2014-12-1 / 42.00元

大数据时代反思知识 因为事实不再是事实,专家随处可见 所有确定性都被连根拔起,话题再无边界,没有人对任何事情能达成一致。 在互联网的引领下,知识现在已经具有了社交性,流动且开放。温伯格向我们展示了这些特点如何可以为我们所用。 ——马克•贝尼奥夫(云计算之父,著有《云攻略》) 这本富有洞见的著作,奠定了温伯格作为数字时代最重要的思想家之一的地位。如果你想要理解信息洪流涌......一起来看看 《知识的边界》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具