详解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 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
Mar 02 Javascript
js+数组实现网页上显示时间/星期几的实用方法
Jan 18 Javascript
用JQuery实现全选与取消的两种简单方法
Feb 22 Javascript
js 获取元素所有兄弟节点的实现方法
Sep 06 Javascript
setTimeout学习小结
Feb 08 Javascript
jQuery实现Select下拉列表进行状态选择功能
Mar 30 jQuery
React如何将组件渲染到指定DOM节点详解
Sep 08 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
React如何解决fetch跨域请求时session失效问题
Nov 02 Javascript
Vue实现按钮级权限方案
Nov 21 Javascript
解决vue-router的beforeRouteUpdate不能触发
Apr 14 Vue.js
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目录导航文件代码
2006/10/09 PHP
paypal即时到账php实现代码
2010/11/28 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
详解YII关联查询
2016/01/10 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
angular.element方法汇总
2015/01/07 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
python比较两个列表是否相等的方法
2015/07/28 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
Python中的Cookie模块如何使用
2020/06/04 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
白莲教口号
2014/06/18 职场文书
学校与家长安全责任书
2014/07/23 职场文书
开发房地产协议书
2014/09/14 职场文书
土地转让协议书
2014/09/27 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
2014年店长工作总结
2014/11/17 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
挂靠协议书
2015/01/27 职场文书