详解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模板技术
Apr 27 Javascript
JavaScript面向对象编程
Mar 02 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
Mar 18 Javascript
jQuery实现页面滚动时动态加载内容的方法
Mar 20 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
Aug 05 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
Node.js connect ECONNREFUSED错误解决办法
Sep 15 Javascript
总结js中的一些兼容性易错的问题
Dec 18 Javascript
小程序实现单选多选功能
Nov 04 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
May 10 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 Javascript
浅谈JavaScript中this的指向更改
Jul 28 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
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
vuejs指令详解
2017/02/07 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
财务主管岗位职责
2014/02/28 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
学习退步检讨书
2014/09/28 职场文书
企业2014年度工作总结
2014/12/10 职场文书
工作年限证明模板
2015/06/15 职场文书
医学会议开幕词
2016/03/03 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript