详解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实现倒计时按钮的实现代码
Mar 23 Javascript
字段太多jquey快速清空表单内容方法
Aug 21 Javascript
jQuery中replaceAll()方法用法实例
Jan 16 Javascript
js模拟淘宝网的多级选择菜单实现方法
Aug 18 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
Bootstrap源码解读导航(6)
Dec 23 Javascript
vue-router跳转页面的方法
Feb 09 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
Mar 07 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
Cordova(ionic)项目实现双击返回键退出应用
Sep 17 Javascript
openlayers实现地图弹窗
Sep 25 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
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
简单的三步vuex入门
2018/05/20 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
windows下python安装小白入门教程
2018/09/18 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
酒吧员工的岗位职责
2013/11/26 职场文书
酒吧创业计划书
2014/01/18 职场文书
业绩考核岗位职责
2014/02/01 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
股东出资协议书
2016/03/21 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
js实现自动锁屏功能
2021/06/02 Javascript
Python实现位图分割的效果
2021/11/20 Python