详解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 相关文章推荐
用Javscript实现表单复选框的全选功能
May 25 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 Javascript
js+css实现增加表单可用性之提示文字
Jun 03 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
七个不允许错过的jQuery小技巧
Dec 21 Javascript
微信小程序之MaterialDesign--input组件详解
Feb 15 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 Javascript
bootstrap paginator分页前后台用法示例
Jun 17 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
Sep 03 jQuery
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
vue实现鼠标经过动画
Oct 16 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 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 htmlspecialchars加强版
2010/02/16 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
市级文明单位申报材料
2014/05/07 职场文书
学习教师法的心得体会
2014/09/03 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
水电施工员岗位职责
2015/04/11 职场文书
天堂的孩子观后感
2015/06/11 职场文书
发票退票证明
2015/06/24 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL