千家信息网

JS中的:host ,:host-context和::ng-deep怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"JS中的:host ,:host-context和::ng-deep怎么用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"JS中的:host
千家信息网最后更新 2026年11月01日JS中的:host ,:host-context和::ng-deep怎么用

这篇文章主要介绍"JS中的:host ,:host-context和::ng-deep怎么用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"JS中的:host ,:host-context和::ng-deep怎么用"文章能帮助大家解决问题。

:host 与 ::ng-deep

:host 表示选择当前的组件。

::ng-deep 可以忽略中间 className 的嵌套层级关系。直接找到你要修改的 className。

在使用一些第三方的组件的时候,要修改组件的样式。
这种情况下使用:

:host ::ng-deep .className{    新的样式......}
:host {     background: #F1F1F1;     overflow: hidden;     padding: 24px;     display: block;} .card-container ::ng-deep .ant-tabs-card .ant-tabs-content {     height: 120px;     margin-top: -16px;}

不过官方文档上说,ng-deep 在未来的版本中将被放弃,不知道未来会变成什么样的语法。使用的时候,记得为未来 Angular 升级带来的变化做准备。

:host-context

::ng-deep 当你没有编写组件并且无法访问其源代码时,通常需要这样做,但是 :host-context 当你这样做时,它可能是一个非常有用的选项.

例如,我

在我设计的组件中有一个黑色标题,我希望能够在黑暗的主题背景上显示时将其更改为白色.

如果我无法访问源代码,我可能必须在父代的 css 中执行此操作:

.theme-dark widget-box ::ng-deep h2 { color: white; }

但相反,:host-context您可以在组件内执行此操作.SCSS代码

h2  {     color: black;       // default color     :host-context(.theme-dark) &     {         color: white;   // color for dark-theme     }     // OR set an attribute 'outside' with [attr.theme]="'dark'"     :host-context([theme='dark']) &     {         color: white;   // color for dark-theme     } }

这将查看组件链中的任何位置,.theme-dark 如果找到,则将 css 应用于 h2.这是一个很好的选择,过分依赖 ::ng-deep,而往往是必要的反模式.

在这种情况下,它&被替换为h2(这就是sass/scss的工作方式),因此您可以将"正常"和主题/替代 css 紧挨着定义,这非常方便.

官网资料

特殊的选择器

组件样式中有一些从影子(Shadow) DOM 样式范围领域引入的特殊选择器:

:host

使用 :host 伪类选择器,用来选择组件宿主元素中的元素(相对于组件模板内部的元素)。

src/app/hero-details.component.css

:host {  display: block;  border: 1px solid black;}

:host 选择是是把宿主元素作为目标的唯一方式。除此之外,你将没办法指定它, 因为宿主不是组件自身模板的一部分,而是父组件模板的一部分。

要把宿主样式作为条件,就要像函数一样把其它选择器放在 :host 后面的括号中。

下一个例子再次把宿主元素作为目标,但是只有当它同时带有 active CSS 类的时候才会生效。

src/app/hero-details.component.css

:host(.active) {  border-width: 3px;}

:host-context

有时候,基于某些来自组件视图外部的条件应用样式是很有用的。 例如,在文档的 元素上可能有一个用于表示样式主题 (theme) 的 CSS 类,你应当基于它来决定组件的样式。

这时可以使用 :host-context() 伪类选择器。它也以类似 :host() 形式使用。它在当前组件宿主元素的祖先节点中查找 CSS 类, 直到文档的根节点为止。在与其它选择器组合使用时,它非常有用。

在下面的例子中,只有当某个祖先元素有 CSS 类 theme-light 时,才会把 background-color 样式应用到组件内部的所有

元素中。

src/app/hero-details.component.css

:host-context(.theme-light) h3 {  background-color: #eef;}

已废弃 /deep/、>>> 和 ::ng-deep

组件样式通常只会作用于组件自身的 HTML 上。

把伪类 ::ng-deep 应用到任何一条 CSS 规则上就会完全禁止对那条规则的视图包装。任何带有 ::ng-deep 的样式都会变成全局样式。为了把指定的样式限定在当前组件及其下级组件中,请确保在 ::ng-deep 之前带上 :host 选择器。如果 ::ng-deep 组合器在 :host 伪类之外使用,该样式就会污染其它组件。

这个例子以所有的

元素为目标,从宿主元素到当前元素再到 DOM 中的所有子元素:

src/app/hero-details.component.css

:host ::ng-deep h4 {  font-style: italic;}

/deep/ 组合器还有两个别名:>>> 和 ::ng-deep。

/deep/ 和 >>> 选择器只能被用在仿真 (emulated) 模式下。 这种方式是默认值,也是用得最多的方式。

CSS 标准中用于 "刺穿 Shadow DOM" 的组合器已经被废弃,并将这个特性从主流浏览器和工具中移除。 因此,我们也将在 Angular 中移除对它们的支持(包括 /deep/、>>> 和 ::ng-deep)。 目前,建议先统一使用 ::ng-deep,以便兼容将来的工具。

关于"JS中的:host ,:host-context和::ng-deep怎么用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

组件 样式 元素 选择 宿主 方式 应用 组合 主题 例子 文档 时候 有用 模板 目标 知识 特殊 只有 工具 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 互联网未来科技 鑫亿盛互联网科技 极限挑战互联网科技 百单互联网科技有限公司 互联网高科技股票 博兴的互联网电子科技公司 隆华科技工业互联网 团飞科技与伯堂互联网服务平台 荆州市昕露互联网络科技有限公司 消费医药和互联网科技 四川慕妮娅互联网科技有限公司 科技赋能视角下互联网保险发展 美国互联网科技实力 山东星卡互联网科技有限公司官网 南通创西澳互联网科技有限公司 宁波跨境商互联网科技有限公司 云鲸互联网络科技有限公司 互联网科技和医药行业 北京瑞云互联网科技有限公司 互联网科技工作委员会副主任毛军 深圳互联网络科技有限公司 友谊互联网络科技 苏州五指互联网络科技有限 互联网媒体平台算高科技产业 健康食品互联网创新科技园项目 富国互联网金融科技混合基金 广东鹅鹅鹅互联网科技有限公司 保山浩联互联网科技有限公司 如何强化互联网金融科技
0