2016-08-11 22 views
1

后我有很难理解为什么Angular2将这些奇怪的属性的应用程序被加载后,HTML元素(例如,所提供的屏幕截图“_ngcontent-CXI-6”)。我用例子提供了DevTools的截图。为什么Angular2添加随机生成属性的HTML元素渲染

从DevTools截图。

该属性始终有固定的前缀“_ngcontent-”。其余部分是随机生成的,但在每个HTML元素上都是一致的。

问题是当我想插入HTML,我在组件产生或从服务器与指令[innerHTML的]检索。在插入HTML代码的情况下,要素没有得到角的属性:

<span [innerHtml]="'<span>some text </span>'"></span> 

的[innerHTML的]效果的画面结合如下:

enter image description here

CSS样式问题

当我想要使用注入的CSS文件来设置这些打印元素的样式时,什么都不会发生。 CSS文件插入 “styleUrls” @Component的属性:

@Component({ 
    templateUrl: 'someHtmlTemplate.html', 
    styleUrls: ['someCSSfile.css'], 
}) 

风格是被注入HTML被格式化成这样:

span[_ngcontent-cxi-6] { 
    background: pink; 
    font-size: 20px; 
} 

在这种情况下,CSS正在寻找跨度具有属性[_ngcontent-CXI-6],从而使其不能样式。

可能的解决方法 这个CSS代码解决的事情

:host >>> h3 { color: red; } 

被注射后编译成HTML:

[_nghost-krr-4] > > > span { 
    background: pink; 
    font-size: 20px; 
} 

但它是这么简单的东西疯狂的迂回方案。

回答

1

实际上,它取决于您在组件上用于影子DOM的封装模式。默认情况下,它是模拟模式,所以Angular2为此添加了元素。

  • ViewEncapsulation.None - 根本没有Shadow DOM。所以也没有样式封装。
  • ViewEncapsulation.Emulated - 没有Shadow DOM,但是样式封装模拟。
  • ViewEncapsulation.Native - Native Shadow DOM。