0

我正在使用带有打字稿的Angular2。

我有一个可以很好地渲染 HTML 的管道。问题是DomSanitizer似乎停止了(单击)事件的工作。

当我检查 console.log (F12) 中的 HTML 时,(单击)代码似乎在那里并且没有被删除。

但是当我单击链接时,它什么也不做。

这是链接的一个示例(它在我的组件中调用一个函数):

<a (click)="recordLinkClick()" target="_blank" href="#">Test link</a>

这是管道:

import { Pipe } from '@angular/core';
import { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser';

@Pipe({
  name: 'safe'
})
export class SafePipe {

  constructor(protected _sanitizer: DomSanitizer) {

  }

  public transform(value: string, type: string = 'html'): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {
    switch (type) {
      case 'html': return this._sanitizer.bypassSecurityTrustHtml(value);
      case 'style': return this._sanitizer.bypassSecurityTrustStyle(value);
      case 'script': return this._sanitizer.bypassSecurityTrustScript(value);
      case 'url': return this._sanitizer.bypassSecurityTrustUrl(value);
      case 'resourceUrl': return this._sanitizer.bypassSecurityTrustResourceUrl(value);
      default: throw new Error(`Invalid safe type specified: ${type}`);
    }
  }

}

这是 HTML 行:

<div [innerHTML]="selectedArticle.body | safe: 'html'"></div>   

如果您需要查看更多代码,请告诉我。

4

1 回答 1

1
<a (click)="recordLinkClick()" target="_blank" href="#">Test link</a>

如果您希望通过innerHTMLAngular放入此锚点,则无需在将其放入 DOM 之前编译html 就不会注册它。

此处介绍了为 Angular 2 动态编译 html 的步骤:如何使用/创建动态模板来使用 Angular 2.0 编译动态组件?

于 2017-03-20T23:06:42.323 回答