详解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 相关文章推荐
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 Javascript
jQuery插件slides实现无缝轮播图特效
Apr 17 Javascript
学习JavaScript正则表达式
Nov 13 Javascript
详解Vue 2.0封装axios笔记
Jun 22 Javascript
vue.js实现简单轮播图效果
Oct 10 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
vue如何在自定义组件中使用v-model
May 14 Javascript
react中使用swiper的具体方法
May 15 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
Vue使用Three.js加载glTF模型的方法详解
Jun 14 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 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 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
深入理解Javascript中的this关键字
2015/03/27 Python
详解Python中的多线程编程
2015/04/09 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
使用python编写监听端
2018/04/12 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
weblogic面试题
2016/03/07 面试题
小学门卫岗位职责
2013/12/17 职场文书
社会保险接收函
2014/01/12 职场文书
关于迟到的检讨书
2014/01/26 职场文书
总经理岗位职责范本
2014/02/02 职场文书
三八节标语
2014/06/27 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
技术股东合作协议书
2014/12/02 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
销售口号霸气押韵
2015/12/24 职场文书
浅谈Java父子类加载顺序
2021/08/04 Java/Android