【SNF-A】新的 Shadow DOM V1 支持

类别

新增功能/Splendid New Feature

置信度

Announcement

起始时间

2018-07-11

内容

Shadow DOM API 是 Web Components 的重要组成部分,用于实现节点、样式、事件等内容的轻量级隔离,保证视图的独立性。

截止目前,Shadow DOM API 已经经历过一次重大调整,最初的 API 现称为 V0,使用 element.createShadowRoot() 创建 Shadow 节点;当前的 API 称为 V1,使用 element.attachShadow() 。

同时,V0 中使用 <content> 标签进行占位,而 V1 中改用 <slot> 标签。而 Angular 也参照 Shadow DOM V0 的语义设计了 <ng-content> 标签。

之前版本的 Angular 中,使用 ViewEncapsulation.Native 时将基于 element.attachShadowRoot 进行样式隔离。而随着越来越多的浏览器开始支持 Shadow DOM V1 以及停止对 V0 的支持,element.attachShadowRoot 的可用性十分有限。

为此,自 6.0.8 版本开始,Angular 新增了ViewEncapsulation.ShadowDom 的选项,将会使用 Shadow DOM V1 的 element.attachShadow API 来实现样式隔离。

之后,还将会提供新的 <ng-slot> 标签来保证对 Shadow DOM V1 的一致性。

相关链接

引入 ViewEncapsulation.ShadowDom 支持的 commit:feat(core): add support for ShadowDOM v1 (#24718) · angular/angular@Shadow DOM V1 问题的汇总 Issue:Add support for Shadow DOM V1 · Issue #23636 · angular/angularAngular 的 ViewEncapsulation 选项:Angular Docs