angular - 角度中的 innerHTML 的正确替代方法是什么
问题描述
在我的角度应用程序中,我使用工具提示。当用户将鼠标悬停在元素上时,我会更改提示值。目前我使用innerHTML
和更新。效果很好。
来自安全团队,他们要求我避免innerHTML
被使用。那么这个的替代品是什么?
有人建议我正确的方法吗?提前致谢。
指令代码:
showToolTip() {
this.container = this.renderer.createElement('div');
this.container.setAttribute('class', `ibo-tooltip ${this.ToolTip.class}`);
this.container.setAttribute('id', `${this.ToolTip.id}`);
this.container.innerHTML = `<div>${this.ToolTip.info}</div>`;
return this.container;
}
解决方案
所以这里是StackBlitz项目来演示创建动态工具提示组件。
我有一个工具提示指令myTooltip
,它负责在悬停时创建一个动态工具提示组件,并在鼠标离开事件时删除。
constructor(private viewContainerRef: ViewContainerRef,
private resolver: ComponentFactoryResolver) {
this.factory = this.resolver.resolveComponentFactory(TooltipComponent);
}
@HostListener('focusin')
@HostListener('mouseenter')
show(): void {
this.tooltipComp = this.viewContainerRef.createComponent(this.factory);
this.tooltipComp.instance.content = this.tooltipContent;
}
@HostListener('focusout')
@HostListener('mouseleave')
@HostListener('DOMNodeRemovedFromDocument')
hide(): void {
this.tooltipComp && this.tooltipComp.destroy();
}
然后我有一个工具提示组件,它接受一个content
变量(值可以从主机组件传递)。所以从技术上讲,您可以将任何内容传递给您的工具提示组件。
@Component({
selector: 'my-tooltip',
templateUrl: './tooltip.component.html',
styleUrls: [ './tooltip.component.css' ]
})
export class TooltipComponent {
name = 'Angular';
content: any;
}
最后,像这样使用它。
<div myTooltip tooltipContent='Hello There!'>
Hover on me
</div>
当然,您必须自己实现工具提示方向和 CSS 逻辑。
推荐阅读
- sql - 在 Access 中运行预构建查询时出现语法错误 3075
- sql - 如何为一列提供其他两列的连接值?
- java - 使用 Recusion for Android 的异常行为
- git - 我可以与同一个 git repo 中的其他子目录共享一个子目录吗?
- php - 添加 1 天至今的代码不起作用
- r - 如何从 h2o 回归中获得 VIF
- flex-lexer - flex lexer:在 yytext 更改后我应该更新哪个变量?
- influxdb - InfluxDB 模式设计 - 只需汇总数千个时间序列数据
- c# - 如何检查日期是否对 3 个整数有效?(方法返回布尔值)
- javascript - 如何修复'php跳过我的if语句'