库组件中Domsanitizer的依赖注入

时间:2019-07-10 08:04:32

标签: angular dependency-injection components

我有一个带组件的简单库,我需要对HTML字符串使用DomSanitizer。我正在我的Application项目中使用这个库。

我已经知道我应该导入Domsanitizer并将其注入到构造函数中,正如许多人已经解释过的:Correct way Provide DomSanitizer to Component with Angular 2 RC6

编辑:

您也可以在此处查看:

LibraryComponent.ts

import {DomSanitizer, SafeHtml} from '@angular/platform-browser';


export class SqvLibComponent implements OnInit {

  constructor( private sanitizer: DomSanitizer ) {
  }

  sequenceRegion: SafeHtml;

  this.sequenceRegion = this.sanitizer.bypassSecurityTrustHtml(myStringtoSanitize);
}

但是我收到一条错误消息:

  

“没有Domsanitizer的提供者!”

有人知道为什么吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

如链接问题中的this answer中所述,您需要确保导入BrowserModule,否则DomSanitizer不会be provided

重要的一点是BrowserModule应该由应用程序根模块而不是库模块导入。

在大多数情况下,BrowserModule可以正确导入,因为cli创建的应用默认情况下会这样做。但是对于不是这样的情况,您可以在代码中添加以下检查:

import {Optional}from '@angular/core';

export class SqvLibComponent implements OnInit {
  sequenceRegion: SafeHtml;
  constructor(@Optional() private sanitizer: DomSanitizer ) {
    if(!!this.sanitizer){
      this.sequenceRegion = this.sanitizer.bypassSecurityTrustHtml(myStringtoSanitize); 
    }else{
      // Depending on your component´s ability to correctly work
      // without this dependency you can either warn or raise an error
      console.warn("Ensure that the `BrowserModule` is imported in the application´s root module");
    }
  }
}