【问题标题】:::ng-deep going to be deprecated - Any alternatives?::ng-deep 将被弃用——还有其他选择吗?
【发布时间】:2018-09-26 08:08:26
【问题描述】:

文档说:

不推荐使用穿透阴影的后代组合器,并且正在从主要浏览器和工具中删除支持。因此,我们计划放弃对 Angular 的支持(对 /deep/、>>> 和 ::ng-deep 的所有 3 个)。在此之前 ::ng-deep 应该是首选,因为它与工具的兼容性更广泛。

既然我想在不更改代码的情况下升级到新版本,那么不推荐使用的方法有哪些替代方法?

【问题讨论】:

  • @trichetriche simply add classes or other selectors to your HTML elements 如果您尝试在模板中的子组件中设置 DOM 节点的样式,因为它们的样式封装(在浏览器中模仿影子 DOM),Angular 的样式不会那样工作跨度>
  • @DanielWSrimpel 这就是我问minimal reproducible example 的原因。并且只需删除封装或使用全局样式,只需一个组件选择器就可以使用该伪选择器。
  • @tricheriche with only a component selector you can get ride of that pseudo selector 是的,只要你去掉封装
  • @DanielWSrimpel 我很确定你可以不用删除它,使用全局样式。
  • 我正在打电话,所以我看不到 plunkr,但我已经这样做了两年多了,所以我真的不知道你在说什么。封装会为您的元素添加随机属性,我看不出 à 样式表会如何破坏它。

标签: angular


【解决方案1】:

在这些东西上从committee meetings 中搜索actual notes 之后,似乎还没有提出替代方案。使用::ng-deep 语法可确保您让 Angular 打破他们为您的样式所做的样式封装(针对模板中子组件中的 DOM 节点)(而不是使用浏览器原生功能,使其更具未来感) - 显然证明)。我认为该注释只是为了让您知道,只要实际浏览器机制到位,他们就会计划实施它。我个人不会回避使用它。

在 CSS 中不使用该运算符的唯一方法是完全不让 Angular 管理组件的样式封装,方法是这样做:

import { ViewEncapsulation } from '@angular/core';

@Component({
    ...
    encapsulation: ViewEncapsulation.None
})

如果您这样做,您的样式将变为全局样式,因此请确保将每个样式规则与您的组件一起添加,以确保它们不会超出此范围。例如,如果您有一个 MyCustomComponent 组件,其选择器为 my-custom-component

my-custom-component button { ... } /* good */
button { ... } /* bad */

【讨论】:

【解决方案2】:

一种可行的替代方法是将 css 样式包含在您的全局 styles.scss 文件*中。

例如,假设您想为在<mat-form-field> 下生成的<div class="mat-form-field-flex"> 元素添加样式,您可以同样使用::ng-deep

你的.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。但不要真的认为这是一个很好的方法,因为很难在全局文件中组织所有应用程序样式,除非您创建一个自定义样式文件夹,在其中放置所有 ng-deep 自定义样式。然后将其导入到全局样式文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2011-04-21
相关资源
最近更新 更多