Настройка SafeHTML - Angular 2
У меня есть div
который id
это "carID".
Мне нужно сделать что-то вроде этого:
magic(){
//Safe Html is imported previously in the component
document.getElementById('carID'): SafeHtml
}
В общем, мне нужно изменить тип моего div на SafeHtml
труба
У меня есть труба:
import { Pipe, PipeTransform } from '@angular/core';
import * as jQuery from 'jquery';
import { escape } from 'querystring';
import { TestExecutionComponent } from './test-execution/test-execution.component';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
//import * as angular from '../angular.js';
//CAMBIAR a string
@Pipe({
name: 'formatXml'
})
export class FormatXmlPipe implements PipeTransform {
constructor(private sanitized: DomSanitizer) {}
testExecutionComponent: TestExecutionComponent;
transform(xml: String): SafeHtml {
var formatted = '';
var reg = /(>)(<)(\/*)/g;
xml = xml.replace(reg, '$1\r\n$2$3');
var pad = 0;
jQuery.each(xml.split('\r\n'), function (index, node) {
var indent = 0;
if (node.match(/.+<\/\w[^>]*>$/)) {
indent = 0;
} else if (node.match(/^<\/\w/)) {
if (pad != 0) {
pad -= 1;
}
} else if (node.match(/^<\w[^>]*[^\/]>.*$/)) {
indent = 1;
} else {
indent = 0;
}
var padding = '';
for (var i = 0; i < pad; i++) {
padding += ' ';
}
formatted += padding + node + '\r\n';
pad += indent;
});
var escaped = formatted.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/ /g, ' ').replace(/\n/g, '<br />');
// https://stackru.com/questions/39240236/insert-xml-into-dom-in-angular-2
let safeEscaped = this.sanitized.bypassSecurityTrustHtml(escaped);
return safeEscaped;
//let safeEscaped = this.sanitized.bypassSecurityTrustHtml(escaped);
//return safeEscaped;
}
}
где я использую bypassSecurityTrustHtml
со строкой.
Составная часть
<div id="carDiv" class="table-responsive">
<table class="table table-bordred table-striped ">
<tbody *ngIf="cars">
<tr *ngFor="let car of cars; let i = index;">
<td *ngIf="i==_rowToShow" [innerHTML]="car.ID| formatXml"></td>
</tr>
</tbody>
</table>
</div>
Мой код работает. Я звоню из файла HTML в мой канал и получаю ответ. Проблема в том, что когда я печатаю его на div
строка остается неизменной (без формата).
Я прочитал, что мне нужно:
- Первый: использовать
bypassSecurityTrustHtml
на веревочке - Второе: распечатайте его на
SafeHtml
Сообщение, которое я проверяю, выглядит следующим образом: Здесь
Я сделал 1-й шаг, поэтому я думаю, что сейчас мне нужно использовать SafeHtml
для Div
.Как мне это сделать?
2 ответа
Обновить
Последние 2 строки должны быть
let safeEscaped = this.sanitized.bypassSecurityTrustHtml(escaped);
return safeEscaped;
оригинал
Это может делать то, что вы хотите
class MyComponent {
constructor(private sanitizer:DomSanitizer){}
magic(){
var safe = this.sanitizer.bypassSecurityTrustHtml(document.getElementById('carID').outerHTML);
}
}
но в зависимости от того, что содержит извлеченный элемент, это может быть мудростью Харакири с готовностью.
Ознакомьтесь с этой библиотекой очистки HTML с открытым исходным кодом для очистки содержимого HTML.
sanitize-HTML предоставляет простой дезинфицирующий HTML-код с понятным API.
sanitize-HTML терпим. Он хорошо подходит для очистки фрагментов HTML, например, созданных CKEditor и другими редакторами форматированного текста. Это особенно удобно для удаления нежелательного CSS при копировании и вставке из Word.
например:
<div [innerHTML]="senitizeHtmlContent(htmlContent)"></div>
senitizeHtmlContent(value){
const html = sanitizeHtml(value);
return html;
}