0

我有一个使用 DomSanitizer 绕过 HTML 的管道。它正在绕过它。但是,它将元素内的所有属性转换为小写。管道看起来像这样:

    @Pipe({
        name: 'innerHTML'
    })
    export class InnerHTMLPipe implements PipeTransform {

        constructor(private _sanitizer: DomSanitizer) { }

        transform(value: any, args?: any): SafeHtml {
            return this._sanitizer.bypassSecurityTrustHtml(value ? value : '');
        }
    }

生成字符串的组件如下所示:

    <div [innerHTML]="getProgress(data) | innerHTML"></div>
    return `<span
        matTooltipPosition="above"
        matTooltip="blablabla">hello</span>`;

但输出最终是这样的:

    <div>
        <span mattooltipposition="above" mattooltip="blablabla">hello</span>
    </div>

如何防止 DomSanitizer 更改属性并保持属性不变?

4

1 回答 1

1

首先,它没有这样做,bypassSecurityTrustHtml只是将您的字符串存储在一个类属性中: https ://github.com/angular/angular/blob/bbeac0727b8f267a47aba1ff1bcfc8cc5ca15b61/packages/platform-b​​rowser/src/security/dom_sanitization_service.ts# L204

其次,您不能简单地通过手动将 Angular 指令添加到 DOM 来使它们工作。

第三,html是不区分大小写的,所以理论上没关系: HTML是否区分大小写?

于 2019-11-27T16:14:22.780 回答