详解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 相关文章推荐
js类后台管理菜单类-MenuSwitch
Sep 12 Javascript
IE 下的只读 innerHTML
Aug 21 Javascript
文件编码导致jquery失效的解决方法
Jun 26 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
jQuery根据name属性进行查找的用法分析
Jun 23 Javascript
原生js获取元素样式的简单方法
Aug 06 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
js实现导航栏中英文切换效果
Jan 16 Javascript
解决vue打包之后静态资源图片失效的问题
Feb 21 Javascript
轻松解决JavaScript定时器越走越快的问题
May 13 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 Javascript
通过实例解析javascript Date对象属性及方法
Nov 04 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将文本文件转换csv输出的方法
2014/12/31 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
Javascript !!的作用
2008/12/04 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
javascript的this关键字详解
2019/05/20 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
Python 实现微信自动回复的方法
2020/09/11 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
J2EE系统只能是基于web
2015/09/08 面试题
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
开学典礼感言
2014/02/16 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
元旦标语大全
2014/10/09 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
MySQL学习必备条件查询数据
2022/03/25 MySQL