详解angular2 控制视图的封装模式
为什么我想要分享控制视图的封装模式呢?主要是我们angular的项目大多数都会去引入一个UI组件,但往往因为需求和关系我们会去修改UI组件的样式。这时,因为有些人不是很了解Viewencapsulation里面的属性,往往会直接在全局的style.js里面添加全局样式,等项目越来越大,就会出现一些不知名的bug和维护起来变得困难。如果你运用好视图的封装模式,会帮你解决好很多的问题。
一般来说组件的CSS样式被封装进了自己的视图中,而不会影响到应用程序的其它部分。通过在组件的元数据上设置视图封装模式,你可以分别控制每个组件的封装模式。Angular2有三种样式封装模式:
- ViewEncapsulation.Native-使用原生的ShadowDom。
- ViewEncapsulation.Emulated-angular2的默认值,通过预处理(并改名)CSS代码来模拟ShadowDOM的行为,在标签上增加标识,来固定样式的作用域,以达到把CSS样式局限在组件视图中的目的。
- ViewEncapsulation.None-没有ShadowDom,样式没有封装,Angular会把CSS添加到全局样式中。而不会应用上前面讨论过的那些作用域规则、隔离和保护等。从本质上来说,这跟把组件的样式直接放进HTML是一样的。
在ViewEncapsulation.Emulated下的Angular应用的DOM树中,每个DOM元素都被加上了一些额外的属性。
MisterFantastic Team
生成出的属性分为两种:
1、一个元素在原生封装方式下可能是ShadowDOM的宿主,在这里被自动添加上一个_nghost属性。这是组件宿主元素的典型情况。
2、组件视图中的每一个元素,都有一个_ngcontent属性,它会标记出该元素是哪个宿主的模拟ShadowDOM。
用法如下:
import{Component,OnInit,ViewEncapsulation}from'@angular/core'; @Component({ selector:'app-factor_analysi', templateUrl:'./factor_analysis.component.html', styleUrls:['./factor_analysis.component.scss'], providers:[factor_analysis_api], encapsulation:ViewEncapsulation.None })
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。