当通过 innerHtml 属性 插入正常超链接时,如何修复 angular 应用程序重新加载?
How to fix angular app reloading on normal hyperlink when it is inserted via innerHtml property?
我有一个具有 message
属性 的警报组件。该消息可能是一些带有 hyperlink 的文本:
An error occured. <a href="/learn-more">Learn more</>
message
是通过innerHtml
插入的:
<div class="alert-text" [innerHtml]="alert.message"></div>
当我单击 link 时,它会重新加载应用程序。我该怎么做才能解决这个问题?
Angular: 7.1.0
innerHTML 不绑定任何 angular 事件,这就是它不起作用的原因
要使其工作,您需要创建负责路线导航的自定义指令。
检查工作样本 - https://stackblitz.com/edit/skdroid-innerhtml-routing
自定义指令 - CustomRouteDirective
import { Directive, ElementRef, HostListener } from '@angular/core';
import { Router } from '@angular/router';
@Directive({
selector: '[appCustomRoute]'
})
export class CustomRouteDirective {
constructor(private el: ElementRef, private router: Router) { }
@HostListener('click', ['$event'])
public onClick(event) {
if (event.target.tagName === 'A') {
this.router.navigate([event.target.getAttribute('href')]);
event.preventDefault();
} else {
return;
}
}
html 代码 - <div appCustomRoute [innerHTML]="sampleHTML"></div>
我有一个具有 message
属性 的警报组件。该消息可能是一些带有 hyperlink 的文本:
An error occured. <a href="/learn-more">Learn more</>
message
是通过innerHtml
插入的:
<div class="alert-text" [innerHtml]="alert.message"></div>
当我单击 link 时,它会重新加载应用程序。我该怎么做才能解决这个问题?
Angular: 7.1.0
innerHTML 不绑定任何 angular 事件,这就是它不起作用的原因 要使其工作,您需要创建负责路线导航的自定义指令。
检查工作样本 - https://stackblitz.com/edit/skdroid-innerhtml-routing
自定义指令 - CustomRouteDirective
import { Directive, ElementRef, HostListener } from '@angular/core';
import { Router } from '@angular/router';
@Directive({
selector: '[appCustomRoute]'
})
export class CustomRouteDirective {
constructor(private el: ElementRef, private router: Router) { }
@HostListener('click', ['$event'])
public onClick(event) {
if (event.target.tagName === 'A') {
this.router.navigate([event.target.getAttribute('href')]);
event.preventDefault();
} else {
return;
}
}
html 代码 - <div appCustomRoute [innerHTML]="sampleHTML"></div>