详解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 浮点运算的问题分析与解决方法
Aug 27 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
js触发select onchange事件的小技巧
Aug 05 Javascript
JS 实现列表与多选框选择附预览动画
Oct 29 Javascript
JavaScript数据结构与算法之栈详解
Mar 12 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
Uploadify上传文件方法
Mar 16 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 Javascript
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
js动态设置select下拉菜单的默认选中项实例
Aug 21 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
Sep 30 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文件夹与文件目录操作函数介绍
2013/09/09 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
详解JavaScript树结构
2017/01/09 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
Python函数学习笔记
2008/10/07 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
python写程序统计词频的方法
2019/07/29 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
给交警的表扬信
2014/01/12 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
优秀教师个人材料
2014/12/15 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
学籍证明模板
2015/06/18 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
SQL SERVER触发器详解
2022/02/24 SQL Server
vue实现移动端div拖动效果
2022/03/03 Vue.js