详解angular2 控制视图的封装模式
程序员文章站
2022-09-05 08:21:59
为什么我想要分享控制视图的封装模式呢?主要是我们angular的项目大多数都会去引入一个ui组件,但往往因为需求和关系我们会去修改ui组件的样式。这时,因为有些人不是很了解...
为什么我想要分享控制视图的封装模式呢?主要是我们angular的项目大多数都会去引入一个ui组件,但往往因为需求和关系我们会去修改ui组件的样式。这时,因为有些人不是很了解view encapsulation里面的属性,往往会直接在全局的style.js里面添加全局样式,等项目越来越大,就会出现一些不知名的bug和维护起来变得困难。如果你运用好视图的封装模式,会帮你解决好很多的问题。
一般来说组件的 css 样式被封装进了自己的视图中,而不会影响到应用程序的其它部分。通过在组件的元数据上设置视图封装模式,你可以分别控制每个组件的封装模式。angular2有三种样式封装模式:
- viewencapsulation.native - 使用原生的shadow dom。
- viewencapsulation.emulated - angular2的默认值,通过预处理(并改名)css 代码来模拟 shadow dom 的行为,在标签上增加标识,来固定样式的作用域,以达到把 css 样式局限在组件视图中的目的。
- viewencapsulation.none - 没有shadow dom,样式没有封装, angular 会把 css 添加到全局样式中。而不会应用上前面讨论过的那些作用域规则、隔离和保护等。 从本质上来说,这跟把组件的样式直接放进 html 是一样的。
在 viewencapsulation.emulated下 的 angular 应用的 dom 树中,每个 dom 元素都被加上了一些额外的属性。
<hero-details _nghost-pmm-5> <h2 _ngcontent-pmm-5>mister fantastic</h2> <hero-team _ngcontent-pmm-5 _nghost-pmm-6> <h3 _ngcontent-pmm-6>team</h3> </hero-team> </hero-detail>
生成出的属性分为两种:
1、一个元素在原生封装方式下可能是 shadow dom 的宿主,在这里被自动添加上一个 _nghost 属性。 这是组件宿主元素的典型情况。
2、组件视图中的每一个元素,都有一个 _ngcontent 属性,它会标记出该元素是哪个宿主的模拟 shadow dom。
用法如下:
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 })
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 小程序文字跑马灯效果
下一篇: Vue3中的大热门——其他技术
推荐阅读
-
CorelDRAW X7的多种视图显示模式详解
-
详解angular2 控制视图的封装模式
-
ASP.NET MVC从控制器传递数据到视图的四种方式详解
-
javascript 3d网页 封装简单的Gui控制器视图类 和 ThreeBSP网格组合 ( three.js r114 初探 三)
-
详解angular2 控制视图的封装模式
-
php的三种访问控制模式的区别实例详解
-
Java如何利用IOC控制反转的三种设计模式详解
-
ASP.NET MVC从控制器传递数据到视图的四种方式详解
-
php的三种访问控制模式的区别实例详解
-
javascript 3d网页 封装简单的Gui控制器视图类 和 ThreeBSP网格组合 ( three.js r114 初探 三)