Преобразовать строку HTML в угловые компоненты

Скажем, мы делаем вызов API и получаем HTML DOM в String. Контент поставляется в формате HTML без углов, поэтому мне нужно сначала преобразовать его в Angular, где я хочу, а затем скомпилировать его как угловой.

Пример ответа API:

<div>
...some more html...
<h1>a header</h1>
...some more html...
<a href="somewhere.com" class="a-class" id="a-id">A Link</a>
...some more html...
</div>

Я преобразую это, чтобы получить все якоря <a href="x"></a> и преобразование их в угловые компоненты с входами и выходами, которые должны быть введены в родительский контейнер и проанализированы все вместе, например:

<angular-anchor   
  [href]="somewhere.com"
  [innerClass]="thisClasses"
  [innerID]="thisID" 
  [content]="thisContent">
</angular-anchor>

angular-anchor содержит метод click, который выполняет код снаружи этих компонентов, но внутри angular (из службы).

Используя [innerHTML] в родительском контейнере, где преобразование выполняется с помощью канала перед тем, как:

<parent [innerHTML]="APIResponseHTML | transformAnchorsPipe"></parent>

Угловые компоненты внутри НЕ будут загружены, и вся работа будет просто необработанной. Угловой анализируется с помощью safeHTML, включенного в преобразование Pipe.

Для решения этой проблемы я использовал библиотеку ng-dynamic, но она устарела и не совместима с компиляцией AOT. Несмотря на это, мне удается работать с JIT-компиляцией, но это плохо для производства и намного менее эффективно.

Примером такого подхода "parentDIV" является стандартный тег HTML:

<parentDIV *dynamicComponent="APIResponseHTML | transformAnchorsPipe; 
    context: {dependency: dependencyName};">
</parentDIV>

контекст содержит все зависимости, необходимые внутри нового компонента, например, мой третий Сервис, который я использую в "angular-anchor"

С этого момента я прочитал несколько документов об Угловых элементах или Инжекторе динамических компонентов, но я не смог получить его в своем приложении.

Есть ли какой-нибудь хороший подход, чтобы использовать мои собственные угловые компоненты, доступные с AOT, используя эти методы, которые я только что упомянул, или любые другие?

Заранее спасибо. Спросите меня для более подробной информации, если это необходимо.

1 ответ

<parent [innerHTML]="APIResponseHTML | transformAnchorsPipe"></parent> Внутренний HTML не является известным свойством parent если parent является компонентом

Передайте ваш html как строку любому из свойств в parent компонент - вы можете достичь с помощью @Input() декоратор на ваши свойства - вы можете иметь представление об этом

Наконец, попробуйте передать строку в качестве внутреннего HTML любому из ваших div теги в parent.component.html - Я надеюсь, что это будет проанализировать вашу строку HTML и добавить HTML внутри указанного div

Если это не сработало - попробуйте добавить html кодирование для вашей строки HTML, а затем попробуйте связать ее - надеюсь, это решит вашу первую проблему - счастливое кодирование:)

Другие вопросы по тегам