- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
谁能解释一下 angular2ViewEncapsulation.Native、 ViewEncapsulation.None 和 ViewEncapsulation.Emulated 之间的区别强>.
我试着用谷歌搜索它并阅读了一些文章,但我无法理解其中的区别。
下面我有两个组件 Home (home.ts),即父组件和 MyComp (my-comp.ts)。我想在子组件中使用的父组件中定义样式。
我应该使用 ViewEncapsulation.Native 还是 ViewEncapsulation.None
home.ts
import {Component, ViewEncapsulation} from 'angular2/core';
import {MyComp} from './my-comp';
@Component({
selector: 'home', // <home></home>
providers: [
],
directives: [
MyComp
],
styles: [`
.parent-comp-width {
height: 300px;
width: 300px;
border: 1px solid black;
}
`],
template:`
<my-comp></my-comp>
<div class="parent-comp-width"></div>
`,
encapsulation: ViewEncapsulation.Native
})
export class Home {
}
my-comp.ts
import {Component} from 'angular2/core';
@Component({
selector: 'my-comp', // <home></home>
template: `
<div class="parent-comp-width">my-comp</div>
`
})
export class MyComp {
}
最佳答案
更新如果您希望将添加到 Parent
的样式应用到 Child
,您需要在 Child
中设置 ViewEncapsulation.None
组件,因此它不会阻止样式渗入。
Emulated
和 Native
只是防止样式渗入组件和从组件渗出的两种不同方式。 None
是唯一允许样式跨越组件边界的样式。
原创
ViewEncapsulation.None 就是简单不封装
ViewEncapsulation.Emulated(目前 Angular2 中的默认设置)
将属性添加到组件标签和子元素,并操作添加到页面的 CSS(将属性添加到选择器),这样样式就不会相互渗透 - 即使样式都是在加载组件时添加到页面头部收集的。
ViewEncapsulation.Native 使用影子 DOM 创建自定义元素,其中浏览器的 native 实现可确保样式范围。
如果浏览器本身不支持 shadow DOM,则需要 web 组件 polyfill 来调整行为。这与 ViewEncapsulation.Emulated
类似,但 polyfill 更昂贵,因为它们会填充大量浏览器 API,即使其中大部分从未使用过。 Angulars Emulated
模拟只是增加了它使用的成本,因此对于 Angular 应用程序来说效率更高。
关于typescript - ViewEncapsulation.Native、ViewEncapsulation.None 和 ViewEncapsulation.Emulated 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35651993/
谁能解释一下 angular2ViewEncapsulation.Native、 ViewEncapsulation.None 和 ViewEncapsulation.Emulated 之间的区别强>
尝试更改封装时,会出现 Emulated、Native、None 和最后一个新的“ShadowDom”4 个选项。我知道 ViewEncapsulation.Native用于使用 Shadow DOM
Angular 的 ViewEncapsulation.ShadowDom 与 ViewEncapsulation.Emulated 有什么区别? 我了解 ViewEncapsulation.None
我最近一直在搞乱 ViewEncapsulation 和 ::ng-deep,遇到了两个不同的问题,这激起了我的好奇心。 假设我有一个组件: 从外部看,我可以通过以下方式为 toolti
在 Angular 中,默认模式是封装:ViewEncapsulation.Emulated 此模式通过使用 CSS 选择器启用样式封装。然而,'encapsulation: ViewEncapsul
我创建了一个新的 Angular CLI 元素和一个组件,我在其中尝试处理 css 特异性。在我尝试的地方,类样式会覆盖标签样式,但只有在 Angular 元素中它才起作用,反之亦然 我发现 View
在我当前的 Angular 7 应用程序中,我们正在努力处理来自库的组件,它需要一些 css 资源。我们不想将这些资源应用到我们应用程序的所有其余部分,而是应用到一个特定的组件,它的子组件和孙组件。
@Component({ ... ... ... encapsulations: ViewEncapsulation.None }) 当我使用 封装就像它与应用程序中其他组件中的默认样式冲突。 最佳答
我遇到的问题是,在尝试通过 ID 访问 html 元素时出现以下错误。当用户单击按钮以将不同的样式类应用于元素时,我尝试访问 classList。类列表和元素通常始终为空,除非我将 viewEncap
我添加了 ::ng-deep 组合器来引用组件中的内容投影元素。但是当我从默认 (ViewEncapsulation.Emulated) 切换到 ViewEncapsulation.ShadowDom
我在 firefox 和 edge 以及 ipad chrome 中使用 ViewEncapsulation.Native 加载 Angular 组件时遇到问题,在 mac 上的 safari、win
我正在尝试使用 styleUrls声明我的 Angular 2 组件以利用 View Encapsulation 时的属性但是在 Angular 完成初始化后将元素插入 DOM 时似乎出现了问题。 我
我想用 ViewEncapsulation.Native 制作组件,它使用 Bootstrap 4,而其他人使用 Bootstrap 3。这是 Bootstrap 4 的组件: import { Co
在 Material2 项目中,每个组件都使用 ViewEncapsulation.None。 (例如 MdButton ) 最近,md-toolbar 的封装刚刚更改为无. 为什么会这样?封装 CS
我必须通过单击按钮使 Angular2 组件看起来完全不同(不仅仅是颜色)。非常像不同的 CSS“皮肤”或“主题”。如果以后可以添加一些“皮肤”也很好。 我知道我可以简单地设置 ViewEncapsu
我安装了“react app 2”和 node-sass。它在 SCSS 上运行良好。但我只想知道如何创建组件特定的 SCSS,如 Angular(永远不会与其他组件 SCSS 发生冲突) Angul
我是一名优秀的程序员,十分优秀!