ng-deep 影响同级组件

Posted

技术标签:

【中文标题】ng-deep 影响同级组件【英文标题】:ng-deep is effecting sibling components 【发布时间】:2019-09-25 04:57:05 【问题描述】:

我在使用 Angular Material Design 时遇到了一个问题,我需要使用 ng-deep 来调整手风琴的样式。但是,我在其他地方使用手风琴,它采用相同的风格。这是不希望的。

它应该这样做吗?我该如何解决?

【问题讨论】:

是的,这是 ng-deep 的假定行为。它覆盖了兄弟组件中的样式。解决这个问题的最简单方法是将您的手风琴包装在父组件的一个类中,并为该类中的手风琴提供 ng-deep。这将防止其他组件中的样式泄漏。 【参考方案1】:

我发现为了将样式限制在组件中,我不得不像这样用 :host 封装 ::ng-deep 代码:

:host 
    ::ng-deep 
        /* ... custom styles here */
    

【讨论】:

【参考方案2】:

ng-deep 已弃用,主流浏览器的支持已被删除。您可以在Angular Docs 中了解更多信息。

我建议您改为从组件中删除视图封装(None 删除了该组件的样式封装,因此您可以定位 Angular Material 样式)。

import  ViewEncapsulation  from '@angular/core';

@Component(
    selector: 'app-example-component',
    templateUrl: './example.component.html',
    styleUrls: ['./example.component.scss'],
    encapsulation: ViewEncapsulation.None
)

【讨论】:

以上是关于ng-deep 影响同级组件的主要内容,如果未能解决你的问题,请参考以下文章

在组件之间切换时,ng-deep 不起作用?

Angular ::ng-deep 不能以全局方式工作

ng-deep 导致 Angular 中的 mat-select 出现问题

react组件优化

web前端面试题集锦二

浮动及清除浮动的方法