详解angular2 控制视图的封装模式


Posted in Javascript onDecember 27, 2018

为什么我想要分享控制视图的封装模式呢?主要是我们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
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript模板技术
Apr 27 Javascript
Javascript !!的作用
Dec 04 Javascript
jQuery源码中的chunker 正则过滤符分析
Jul 31 Javascript
javascript实现自动填写表单实例简析
Dec 02 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
ajax分页效果(bootstrap模态框)
Jan 23 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
Oct 16 Javascript
快速搭建React的环境步骤详解
Nov 06 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
JQueryDOM之样式操作
Mar 27 jQuery
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
Jul 22 Javascript
JS数组方法reverse()用法实例分析
Jan 18 Javascript
JavaScript原型对象原理与应用分析
Dec 27 #Javascript
angular6 填坑之sdk的方法
Dec 27 #Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 #Javascript
React降级配置及Ant Design配置详解
Dec 27 #Javascript
详解Ant Design of React的安装和使用方法
Dec 27 #Javascript
利用Angular2的Observables实现交互控制的方法
Dec 27 #Javascript
angular 用Observable实现异步调用的方法
Dec 27 #Javascript
You might like
php中var_export与var_dump的区别分析
2010/08/21 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
python多进程共享变量
2016/04/06 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python实现猜单词小游戏
2020/05/22 Python
python实现汽车管理系统
2018/11/30 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
美国创意之家:BulbHead
2017/07/12 全球购物
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
电子商务自荐书范文
2014/01/04 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
第一书记观后感
2015/06/08 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书