Я создаю почтовый запрос с обещанием, используя угловой 6. В моей службе я создал функцию запроса, которая выглядит так:
sendRequest() {
let promise = new Promise((resolve, reject)=>{
this.http.post(this.url, this.params, {responseType: 'text'}).toPromise()
.then(res =>{
this.data = res;
this.router.navigateByUrl('1/success'); // I want to show res code on this page
resolve();
},
error => {
this.data = error;
this.router.navigateByUrl('1/fail');
reject(error);
}
)
return promise;
})}
res возвращает текст в формате html следующим образом:
<html> <head> some code </head> <body> code я need </body> </html>
, это нормально, но я хотел бы использовать этот текст в качестве html-кода на странице успеха/сбоя. В частности, все, что есть в теге тела. Как я могу это достичь? Если я использую что-то вроде
<div [innerHTML]="res"></div>
или же
{{res}}
он просто возвращает текст.
Угловое кодирует значения, возвращаемые api для целей безопасности. Вы должны использовать службу DomSanitizer в своей службе, чтобы обойти ее.
Сначала введите услугу:
constructor(private sanitizer:DomSanitizer){}
Затем используйте его в функции sendRequest:
this.data = this.sanitizer.bypassSecurityTrustHtml(res);
И затем в вашем html файле:
<div [innerHTML]="data"></div>
Замечания:
Доверительные значения в формате HTML могут представлять угрозу безопасности, как указано в документах.
Используя innerHTML
:
<div [innerHTML]="res"></div>
Удостоверьтесь, что у вас есть контроллер где-то вокруг, возможно, вы забыли его?
Он должен работать в соответствии с этим: синтаксис углового шаблона