关于Angular ViewEncapsulation枚举缺少值为1的键的疑问
关于Angular ViewEncapsulation枚举缺少值为1的键的疑问
嘿,这个问题我研究Angular源码的时候也琢磨过,其实是历史遗留+兼容性考量导致的,给你掰扯清楚:
首先先看现在我们能看到的ViewEncapsulation枚举结构,大概是这样的:
enum ViewEncapsulation { Emulated = 0, None = 2, ShadowDom = 3 }
为啥中间空了个1?这得从Angular的版本迭代说起:
- 曾经存在的废弃项:在Angular早期版本(比如Angular 2到Angular 4左右),这个枚举里还有一个
Native选项,对应的数值就是1。它是基于当时浏览器还在试验阶段的Shadow DOM v0规范实现的。 - 标准迭代后的替换:后来Shadow DOM v1成为了官方标准,浏览器对它的支持也越来越完善,Angular就引入了
ShadowDom(数值3)来替代原来的Native,同时直接移除了Native这个枚举项。 - 为兼容旧代码保留数值空位:这里最关键的是,Angular团队没有调整后续枚举项的数值(比如把
None改成1、ShadowDom改成2)。因为很多老项目可能会直接硬编码枚举的数值(比如写encapsulation: 2而不是ViewEncapsulation.None),如果贸然改动数值,这些旧代码的行为就会完全混乱,引发不必要的兼容性bug。
简单来说就是:原来的数值1对应的枚举项被废弃移除了,但为了不影响依赖硬编码数值的老项目,就把这个数值位置空出来,保留了后续项的原有数值。
备注:内容来源于stack exchange,提问作者kstepien
相关产品推荐
相关产品推荐

