Angular 4 innerHTML属性删除id属性

时间:2018-02-01 06:47:02

标签: javascript angular typescript dom

我通过更新元素的innerHTML来加载一些HTML内容(在api调用后加载一些内容)。除了一件事之外,一切都有效,它会从加载的内容中删除id属性。

组件代码:

 content: string;
 @ViewChild('div') divContainer: ElementRef;

  constructor(private cd: ChangeDetectorRef) {
    // actually hee loading content using some api call
    setTimeout(() => {
      this.content = "<a href='#' id='cafeteria' class='cafeteria'>Cafeteria</a>";
      this.cd.detectChanges();  
      this.divContainer.nativeElement.querySelector('#cafeteria').addEventListener('click', (e) => {
        e.preventDefault();
        console.log('clicked');
      });
    }, 1000);
  }

模板:

 <div #div [innerHTML]="content"></div>

在Chrome控制台中进行检查时:

enter image description here

在上面的代码this.divContaainer.nativeElement.querySelector('#cafeteria')中返回null,因为ID丢失,当我用calss选择器替换它时,它会工作。

缺少id属性,并且有类属性,是否有任何具体原因?

2 个答案:

答案 0 :(得分:7)

试试这个http://plnkr.co/edit/JfG6qGdVEqbWxV6ax3BA?p=preview

使用safeHtml管道.sanitized.bypassSecurityTrustHtml

@Pipe({ name: 'safeHtml'})
export class SafeHtmlPipe implements PipeTransform  {
  constructor(private sanitized: DomSanitizer) {}
  transform(value) {
    return this.sanitized.bypassSecurityTrustHtml(value);
  }
}

@Component({
  selector: 'my-app',
  template: `<div #div [innerHTML]="content | safeHtml"></div>1`,
})

答案 1 :(得分:0)

如果您不在多个地方使用innerHtml

在您的TS中

content = "<a href='#' id='cafeteria' class='cafeteria'>Cafeteria</a>";
newContent:any;

    constructor(private sanitized: DomSanitizer) { 
        this.newContent = this.sanitized.bypassSecurityTrustHtml(content)
    }

在您的HTML中

<div #div [innerHTML]="newContent"></div>