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)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

智慧社会

智慧社会

阿莱克斯·彭特兰 (Alex Pentland) / 汪小帆、汪容 / 浙江人民出版社 / 2015-4 / CNY 56.90

●如果要在大数据领域推举出一个代表性的科学家,阿莱克斯·彭特兰是一个无法令人忽略的名字。经过数年极具开创性的研究,社会物理学这个全新科学领域的根基已足够深厚。社会物理学是关于想法流的科学,正是在想法流的帮助下,我们才得以提高集体智能,促进智慧社会的形成。 ● 通过研究数以百万计的人在智能手机、GPS设备、互联网等地方留下的“数字面包屑”,大数据的应用已成为一股无法被忽视的力量。在大数据的应用......一起来看看 《智慧社会》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具