文档显示:
穿透影子后代选择器已经过时,在主流浏览器和工具中不再支持。因此,我们计划在 Angular 中停止支持所有 /deep/、>>> 和 ::ng-deep 3 种方式。在此之前,应优先使用 ::ng-deep 以获得更广泛的工具兼容性。
既然我想升级到新版本而不改变代码,那么被弃用方法的替代方法是什么?
文档显示:
穿透影子后代选择器已经过时,在主流浏览器和工具中不再支持。因此,我们计划在 Angular 中停止支持所有 /deep/、>>> 和 ::ng-deep 3 种方式。在此之前,应优先使用 ::ng-deep 以获得更广泛的工具兼容性。
既然我想升级到新版本而不改变代码,那么被弃用方法的替代方法是什么?
::ng-deep
语法可以确保让Angular负责打破样式封装(对于模板中子组件的DOM节点),从而使用你的样式(而不是使用浏览器原生特性,使其更具未来性)。我认为这个注释只是想让你知道,每当实际的浏览器机制被放置时,他们计划实施它。我个人不会回避使用它。import { ViewEncapsulation } from '@angular/core';
@Component({
...
encapsulation: ViewEncapsulation.None
})
my-custom-component
的MyCustomComponent
组件:my-custom-component button { ... } /* good */
button { ... } /* bad */
:host
,而不是my-custom-component
。此外,如果您的项目使用SCSS,您可以将所有规则放在一个:host
规则中,如:host { /* 我的规则 */ }
。 - undefined一种可行的替代方案是将CSS样式包含在全局的styles.scss
文件中*。
例如,假设您想要为在<mat-form-field>
下生成的<div class="mat-form-field-flex">
元素添加样式,您可以使用::ng-deep
:
your.component.scss
::ng-deep mat-form-field.mat-form-field div.mat-form-field-flex {
padding: 0 0 0 .75em;
}
或者,您可以更改:
styles.scss:
mat-form-field.mat-form-field div.mat-form-field-flex {
padding: 0 0 0 .75em;
}
*:这是添加到您的angular.json
文件中样式集合中的任何文件。
"styles": [
"src/theme.scss",
"src/styles.scss"
],
index.html
文件的,尽管该索引没有任何等效于 ViewEncapsulation.None
的 Angular 预构建封装。但我认为这不是一个好方法,因为在全局文件中组织所有应用程序样式会很困难,除非您创建一个自定义样式文件夹,将所有 ng-deep 自定义样式放置在其中,然后将其导入到全局样式文件中。 - getName