详解angular2 控制视图的封装模式
为什么我想要分享控制视图的封装模式呢?主要是我们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 })
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
AngularJS基础 ng-selected 指令简单示例
本文主要介绍AngularJS ng-selected 指令,这里对ng-selected 指令的基础资料做了详细介绍,并附有示例代码,有需要的小伙伴可以参考下2016-08-08Facade Service暴露commands简化代码逻辑提高可访问性组合性
在 Angular 应用开发中,使用 Facade Service 暴露 commands(命令)以及订阅这些 commands 是一个常见的设计模式,本文将详细介绍在 Facade Service 中如何实现这一目标,并深入探讨相关细节,以及通过实际示例进行说明2023-10-10Angular 2父子组件数据传递之@Input和@Output详解(下)
这篇文章主要给大家介绍了关于Angular 2父子组件数据传递之@Input和@Output的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。2017-07-07AngularJs Dependency Injection(DI,依赖注入)
本文主要介绍AngularJs Dependency Injection,这里整理了详细资料及示例代码有兴趣的小伙伴可以参考下2016-09-09AngularJS深入探讨scope,继承结构,事件系统和生命周期
这篇文章主要介绍了AngularJS的scope,继承结构,事件系统和生命周期,较为详细的分析了scope的作用域、层次结构、继承及生命周期相关概念与使用技巧,需要的朋友可以参考下2016-11-11
最新评论