填坑指南-Angular1升级到Angular8之组件样式封装

背景

angular1升级Angular8须要了解的改变,请移步传送门。 angular8核心思想:模块化,各组件维护本身的样式。css

样式升级

angular1代码

//以前代码scss, 图便利,常写在父组件的scss文件中,
.parent-container{
 .demo-container {
	 .items{
	    .....
	  }
 }
}	
复制代码

angular1编译后

.parent-container{
 ....
}
.parent-container .demo-container{
 ....
}
.parent-container .demo-container .items{
 ....
}
复制代码

angular8样式封装

  • ShadowDom : 组件的宿主元素附加一个 Shadow Dom,进行样式标识。支持度有限。
  • None: 不进行样式封装,暴露为全局样式。
  • Native:已废弃。
  • Emulated : 模式(默认值),css样式重命名,进而惟一标识。此时,针对js动态添加的元素,须要使用:host, ::ng-deep 保持层级关系。

angular8样式须要拆分

各组件维护本身的样式 选择器要对应htmlhtml

.parent-container{
 ...
}
复制代码
// child 组件scss文件定义
 .demo-container{
    .items{
		 ....
		}
 }
复制代码

angular8动态元素样式不生效

.demo-container{
    .items{
		 ....
		}
 }
复制代码
//采用默认Emulated模式,此时动态添加的元素,样式会不生效。编译后以下
[_nghost-kjf-c2]   .demo-container[_ngcontent-kjf-c2]{
 ....
}
[_nghost-kjf-c2]   .demo-container[_ngcontent-kjf-c2]   .items[_ngcontent-kjf-c2] {
	....
}
复制代码

angular8动态元素样式生效

:host ::ng-deep .demo-container{
    .items{
		 ....
		}
 }
复制代码
//添加:host ::ng-deep,不由于重命名影响层级关系,编译以下
[_nghost-svo-c2]     .demo-container{
  ....
}
[_nghost-svo-c2]     .demo-container .items {
	...
}
复制代码

参考文献

Angular样式封装

本文做者:前端首席体验师(CheongHu)前端

联系邮箱:simple2012hcz@126.combash

相关文章
相关标签/搜索