详解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 EasyPager 分页函数
May 25 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
jquery查找父元素、子元素(个人经验总结)
Apr 09 Javascript
node.js中的http.response.write方法使用说明
Dec 14 Javascript
jQuery中odd选择器的定义和用法
Dec 23 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
Aug 23 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
Dec 30 Javascript
Vue循环组件加validate多表单验证的实例
Sep 18 Javascript
简单的React SSR服务器渲染实现
Dec 11 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
使用apifm-wxapi模块中的问题及解决方法
Aug 05 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 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加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
php支付宝APP支付功能
2020/07/29 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
Python Django view 两种return的实现方式
2020/03/16 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
仓库管理专业个人自我评价范文
2013/11/11 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
机动车交通事故协议书
2015/01/29 职场文书
西湖英语导游词
2015/02/06 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
同学联谊会邀请函
2019/06/24 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
python 离散点图画法的实现
2022/04/01 Python