Я использую вход Angular 2+ [innerHTML] для вставки форматирования HTML, включая метки стиля.
В моем шаблоне у меня есть что-то вроде:
<span [innerHTML]="someVar"></span>
В моем компоненте у меня есть:
someVar = '<span style="background-color:#990000">test</span>';
Я получаю предупреждение:
WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).
В выводе, вставленный пролет в неповрежденном, минус атрибут стиля.
Поэтому я использовал трубку из этого сообщения:
Это выглядит как:
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@Pipe({name: 'safeHtml'})
export class SanitizeHtml implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
transform(html): SafeHtml {
// return this.sanitizer.bypassSecurityTrustStyle(style);
return this.sanitizer.bypassSecurityTrustHtml(html);
// return this.sanitizer.bypassSecurityTrustScript(value);
// return this.sanitizer.bypassSecurityTrustUrl(value);
// return this.sanitizer.bypassSecurityTrustResourceUrl(value);
}
}
Это не дает никакой разницы, чем раньше, хотя я не уверен, что использую это правильно...
Как я могу заставить Angular сохранить атрибут стиля с помощью innerHTML?
Ты почти там. Вам просто нужно убедиться, что вы используете свой канал для своей строки HTML.
Пример трубы:
import {Pipe} from '@angular/core';
import {DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl} from '@angular/platform-browser';
@Pipe({
name: 'safe'
})
export class SafePipe {
constructor(protected sanitizer: DomSanitizer) {}
transform(htmlString: string): any {
return this.sanitizer.bypassSecurityTrustHtml(htmlString);
}
}
Пример использования:
<span [innerHTML]="someVar | safe"></span>
Надеюсь это поможет!
Либо вы используете этот фильтр, либо используете его в своем коде.
Чтобы применить фильтр, вам необходимо использовать его в своем HTML, например:
<span [innerHTML]="someVar | safeStyle"></span>