2 回答
TA贡献2065条经验 获得超14个赞
所以基本上我在忽略 DomSanitizer 后遇到了安全问题,所以我去了https://angular.io/guide/security#xss并总结并更改了我的代码以获得我想要的。我导入了 DomSanitizer
import { DomSanitizer} from '@angular/platform-browser';
....
newSteps=[];
constructor(private sanitizer: DomSanitizer) { }
ngOnInit() {
for (let i = 0; i < this.steps.length; i++) {
this.newSteps.push(this.sanitizer.bypassSecurityTrustHtml(this.steps[i].icon));
}
}
然后只需使用[innerHTML]标记 html 文件
<div id="steps" class="step-image" [innerHTML]="step">
</div>
TA贡献1865条经验 获得超7个赞
您可以创建一个指令,该指令接受 svg 字符串并将其添加到其宿主元素的innerHTML 中。然后使用该指令将样式动态应用到内部 svg。
注意:这会绕过 Angular 的DomSanitizer,并使您容易受到 XSS 漏洞的影响。仅当您信任 svg 字符串的来源时才使用此方法。
@Directive({
selector: '[svgIcon]',
})
export class SvgIconDirective implements OnChanges {
@Input()
svg?: string;
constructor(
private _elementRef: ElementRef,
) {}
ngOnChanges(changes: SimpleChanges) {
if (changes.svg) {
this._elementRef.nativeElement.innerHTML = '';
if (this.svg) {
this._elementRef.nativeElement.innerHTML = this.svg;
}
}
}
}
- 2 回答
- 0 关注
- 139 浏览
添加回答
举报