在使用NG-ZORRO组件的过程中,需要根据产品的需要,在某些页面修改某些NZ组件的样式。但是由于angular默认采用了Emulated的视图封装模式,导致即便我们想在父组件中直接去重写子组件的样式,也无法办到。

例如AppComponent是一个"父组件",其内包含Comp1Component与Comp2Component两个"子组件"。即使我在AppComponent中添加样式如下样式,然而组件1的字体颜色依然没有变成红色。设置在控制台选中组件1,styles中根本没有对应的样式。

.f-red{

color: red;

}

/* 企图修改组件1的字体颜色 */

#comp1{

color: red;

}

问题分析

angular组件的CSS样式被封装进了自己的视图中,而不会影响到应用程序的其它组件,这个效果在大部分时候非常的有用,我们不用担心某个组件的代码会污染其子组件,但当我们想改变第三方库的样式的时候也非常的麻烦。angular的视图封装模式默认是Emulated 模式,以下是官方对其功能的描述。

通过预处理(并改名)CSS 代码来模拟 Shadow DOM 的行为,以达到把 CSS 样式局限在组件视图中的目的。

其实如果在html中搜索#comp1,会得到如下的结果。angular默认的为每个组件添加了一个属性,同样也为css限定了对应的属性。这也是为什么在"父组件"修改"子组件"不生效,因为根本找不到#comp1[_ngcontent-haw-c0]选择器对应的元素。

解决办法

可以使用 /deep/、>>>或::ng-deep选择器来强制一个样式对各级子组件的视图也生效,它不但会作用于组件的子视图,也会作用于投影进来的内容(ng-content)。

.f-red{

color: red;

}

/* 企图修改组件1的字体颜色 */

/* :host ::ng-deep #comp1{

color: red;

} */

:host /deep/ #comp1{

color: red;

}

需要注意的是CSS标准中用于"刺穿 Shadow DOM"的组合器已经被废弃,并将这个特性从主流浏览器和工具中移除。angular官方建议统一使用 ::ng-deep,以便兼容将来的工具。

原文:https://blog.51cto.com/13876655/2393237

angular 控件css_Angular父组件内修改子组件的样式相关推荐

  1. Vue3 使用expose让父组件直接修改子组件的值

    最近写Vue3项目的时候无意间知道expose这个语法糖,expose可以使父组件直接去修改子组件的数据,那么废话不多说下面演示一下

  2. angular 控件css_Angular 4 设置组件样式的几种方式

    你用Angular吗? 一.介绍 如何只改动最简单的css代码,呈现完全不一样的视图效果. 第一种:最基本的设置: 图1 代码 图2 界面运行效果图 平常,想给一个label或者p等标签添加样式,我们 ...

  3. angular新版 父组件修改子组件某个div样式

    <!-- 父组件 father.html --> <div class="wrapper"><app-child></app-child& ...

  4. WPF查找子控件和父控件方法

    原文:WPF查找子控件和父控件方法 public List<T> GetChildObjects<T>(DependencyObject obj, string name) w ...

  5. vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题

    Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素,它是通过使 ...

  6. vue ui无效_vue开发中,父组件添加scoped之后。解决在父组件中无法修改子组件样式问题。...

    在vue的开发中,我们需要引用子组件,包括ui组件(element.iview).但是在父组件中添加scoped之后,在父组件中书写子组件的样式是无效果的.去掉scoped之后,样式可以覆盖.但这样会 ...

  7. pyqt 子控件更新父控件ui

    可以用信号槽,好像专业点. 也可以直接用变量通信. 子控件更新父控件ui时,重新弹了一个窗口,父控件重新建了一个实例 仔细查原因 是子控件,父控件都有信号槽,相互连接,把关系搞串了,后来删掉一端的信号 ...

  8. WPF获取当前用户控件的父级窗体

    方式一.通过当前控件名获取父级窗体Window targetWindow = Window.GetWindow(button);方式二.通过当前控件获取父级窗体Window parentWindow ...

  9. android 控件覆盖关系,安卓子控件抢占父控件点击事件或者焦点问题

    开发中很常见的一个问题,项目中的lListview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现 ...

最新文章

  1. 使用OpenCV和Python计算图像的“彩色度”
  2. KVM虚拟化实践(一)
  3. sql用什么替代or
  4. linux命令 把文件夹拷贝一遍_cp 快捷命令:复制文件到多个目录
  5. TRDD got lost again
  6. struts2配置文件的位置
  7. 帆软报表多行多条数据写入表_在线报表FineReport中多数据集如何实现层式报表...
  8. c语言表达式10 3的结果是,C语言程序设计--第3讲运算符与表达式.ppt
  9. mysql数据库简单语句
  10. 【岗位详情】腾讯广告大数据开发工程师(北京)
  11. 代码调试技巧【OI缩水版】
  12. 网络通讯技术在嵌入式系统中的应用
  13. 可怕!中国博士留学生在美国遭枪击身亡,北大毕业,已经读到了博士第四年...
  14. 解决VIM打开U盘文件中文乱码的问题以及VIM有用的配置
  15. 您的账号与服务器断开连接,节奏大师您解决服务器断开连接的方法(帐号与服务器断开连接怎么办)...
  16. 日记侠:要赚钱千万别多想立刻开干
  17. ESP8266-Arduino编程实例-HMC5883L磁场传感器
  18. 免费全球网络学习学院上线以支持妇女发展
  19. 苹果自带的清理软件_系统自带垃圾清理软件屁用没有,但这款9.4评分的真心好用...
  20. LSTM - 长短期记忆网络

热门文章

  1. Swift - 控制流/控制结构说明(if,switch,for,while)
  2. 病毒注册表常用目标Svchost和Explorer
  3. js:{}与new Object()的区别是什么
  4. 为U盘装备Ubuntu工作学习两不误
  5. 使用CDN加速后网站不能使用HttpWebRequest提交数据
  6. [转]WTL的windows mobile环境的配置(vs2008)[最终版,验证通过]
  7. Python 爬虫咸鱼版
  8. 【加密解密】密码学学习
  9. linux .bashrc文件修改和生效
  10. JS框架设计读书笔记之-函数