angular - “SafeValue 必须使用 [property]=binding:” Angular 中的消息
问题描述
我有一个定义如下的 html 对象(父对象):
<app-new-message [message]="msg.Htmltext></app-new-message>
在子对象中,当我使用在我定义的父对象中定义的消息时:
@Input() set message(value: string){
if (value != ''){
this.newMessage.message = '\n\n\n' + value;
}
}
但是当我执行应用程序时,我会在显示消息时在子对象中收到此消息:
SafeValue 必须使用 [property]=binding: "text message"
有什么帮助可以避免这个警告信息吗?
提前谢谢你。
解决方案
问题是您传递的字符串包含 html 标签。
Angular 会发出这个警告/错误,因为这些标签可能是危险的并被攻击者插入。
网络链接也是如此,如果您之前没有清理它们,Angular 将阻止它们。
在此处阅读更多信息:https ://angular.io/api/platform-browser/DomSanitizer
要修复警告,首先在您的组件/服务中注入 DomSanitizer:
constructor(private readonly _sanitizer: DomSanitizer){}
然后清理值:
public safeValue: SafeHtml;
this.safeValue = this._sanitizer.bypassSecurityTrustHtml(this.msg.Htmltext);
并将 safeValue 传递给另一个组件:
<app-new-message [message]="safeValue"></app-new-message>
您可以编写一个为您执行此操作的管道:
@Pipe({ name: 'safeHtml' })
export class SafeHtmlPipe implements PipeTransform {
constructor(private readonly _sanitizer: DomSanitizer) { }
public transform(html: string): SafeHtml {
return this._sanitizer.bypassSecurityTrustHtml(html);
}
}
用法:
<app-new-message [message]="msg.Htmltext | safeHtml"></app-new-message>
推荐阅读
- vue.js - Vue JS:单击时传递循环的当前对象
- c++ - 虽然 C++ 给出的结果与我预期的不同
- mongodb - 使用php从嵌入式数组中获取记录编写mongodb驱动程序查询
- windows - 如何取消这个烦人的提示?我尝试了很多方法,但没有奏效
- r - 如何在 R 延续中的数据框中将第一个唯一记录标记(标记)为 1,其余类似记录为 0
- linux - 服务启动失败
- android - java.lang.IllegalStateException:不是标准目录错误之一使用 DownloadManager
- python - 为什么我不能用 Python 提取文件
- github - 如何将在恢复的分支上完成的提交添加到旧 PR?
- javascript - 有一个不受 WM 影响的电子窗口