Инъекция зависимости Domsanitizer в компонент библиотеки - PullRequest
1 голос
/ 10 июля 2019

У меня есть простая библиотека с компонентом, и мне нужно использовать DomSanitizer для строк HTML. Я использую эту библиотеку в своем проекте приложения.

Я уже знаю, что должен импортировать Domsanitizer и внедрить его в конструктор, как уже объяснили многие: Правильный способ Предоставить DomSanitizer компоненту с Angular 2 RC6

EDIT:

Как вы также можете проверить здесь:

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 голосов
/ 10 июля 2019

Как уже упоминалось в в этом ответе в связанном вопросе, необходимо убедиться, что BrowserModule импортировано, в противном случае DomSanitizer не будет предоставлено .

Одна важная вещь заключается в том, что BrowserModule должен импортироваться приложением корневой модуль , а не библиотечный модуль .

В большинстве случаев BrowserModule будет правильно импортирован, как это делается по умолчанию в приложениях, созданных клиентом.Но для случаев, когда это не так, вы можете добавить следующие проверки в свой код:

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");
    }
  }
}
...