为什么 css 规则未应用于注入 html 的 dom 已净化 angular 字符串?
Why are css rules not being applied to dom sanitized angular strings injected into html?
我有一个非常奇怪的问题,即在 html 中注入时未应用 css 规则
这是注入 html:
的代码
decorate(text)
{
return this.sanitizer.bypassSecurityTrustHtml(text.replace('Doe','<b>Doe</b>'));
}
在模板中:
<h1 [innerHTML]="decorate('JohnDoe')"></h1>
<h1>Jane<b>Doe</b></h1>
我为
添加了 CSS 规则
h1 { color:#888; }
h1 b {color:#ff0000;}
但是,JognDoe 仍然是灰色的,而 JaneDoe 如预期的那样让 Doe 变成红色。为什么 Johns'Doe 没有呈现为红色?
渲染的 HTML 在检查器中看起来像这样:
<h1 _ngcontent-c11="">John<b>Doe</b></h1>
<h1 _ngcontent-c11="">Jane<b _ngcontent-c11="">Doe</b></h1>
对我来说,Johndoe 没有理由是灰色的..:[=20=]
我用这个问题组装了一个小沙箱:
Angular 默认使用 ViewEncapsulation.Emulated。这意味着 CSS 将仅应用于当前组件的元素。由于这种模拟封装 angular 阻止样式应用于 innerHTML 元素。您可以通过将模拟视图更改为 none.
来解决此问题
试试这个:
component.ts
import { Component, ViewEncapsulation } from "@angular/core";
import { DomSanitizer } from "@angular/platform-browser";
@Component({
selector: "my-app",
styleUrls: ["./app.component.scss"],
templateUrl: "./app.component.html",
encapsulation: ViewEncapsulation.None
})
export class AppComponent {
readonly name: string = "Angular";
version: number = 7;
constructor(private sanitizer: DomSanitizer) {}
onVersionRelease(): void {
this.version += 1;
}
decorate(text) {
return this.sanitizer.bypassSecurityTrustHtml(
text.replace("Doe", "<b>Doe</b>")
);
}
}
我有一个非常奇怪的问题,即在 html 中注入时未应用 css 规则 这是注入 html:
的代码decorate(text)
{
return this.sanitizer.bypassSecurityTrustHtml(text.replace('Doe','<b>Doe</b>'));
}
在模板中:
<h1 [innerHTML]="decorate('JohnDoe')"></h1>
<h1>Jane<b>Doe</b></h1>
我为
添加了 CSS 规则h1 { color:#888; }
h1 b {color:#ff0000;}
但是,JognDoe 仍然是灰色的,而 JaneDoe 如预期的那样让 Doe 变成红色。为什么 Johns'Doe 没有呈现为红色?
渲染的 HTML 在检查器中看起来像这样:
<h1 _ngcontent-c11="">John<b>Doe</b></h1>
<h1 _ngcontent-c11="">Jane<b _ngcontent-c11="">Doe</b></h1>
对我来说,Johndoe 没有理由是灰色的..:[=20=]
我用这个问题组装了一个小沙箱:
Angular 默认使用 ViewEncapsulation.Emulated。这意味着 CSS 将仅应用于当前组件的元素。由于这种模拟封装 angular 阻止样式应用于 innerHTML 元素。您可以通过将模拟视图更改为 none.
来解决此问题试试这个:
component.ts
import { Component, ViewEncapsulation } from "@angular/core";
import { DomSanitizer } from "@angular/platform-browser";
@Component({
selector: "my-app",
styleUrls: ["./app.component.scss"],
templateUrl: "./app.component.html",
encapsulation: ViewEncapsulation.None
})
export class AppComponent {
readonly name: string = "Angular";
version: number = 7;
constructor(private sanitizer: DomSanitizer) {}
onVersionRelease(): void {
this.version += 1;
}
decorate(text) {
return this.sanitizer.bypassSecurityTrustHtml(
text.replace("Doe", "<b>Doe</b>")
);
}
}