详解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回车实现登录简单实现
Aug 20 Javascript
JS常用正则表达式总结
Nov 12 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
Sep 26 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
php输出全部gb2312编码内的汉字方法
Mar 04 Javascript
深入理解Angularjs中$http.post与$.post
May 19 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
使用JS获取SessionStorage的值
Jan 12 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 jQuery
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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
php 常用的系统函数
2017/02/07 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
Python生成随机数的方法
2014/01/14 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
Java的基础面试题附答案
2016/01/10 面试题
大学生表扬信范文
2014/01/09 职场文书
出国导师推荐信
2014/01/16 职场文书
八一建军节感言
2014/02/28 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
世界遗产导游词
2015/02/13 职场文书
环保宣传语大全
2015/07/13 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL