Вот как работает домсанитизатор. Это похоже на то, что я уже делаю, но не использует угловые директивы (например, routerLink) во время компиляции, поэтому это не решает мой вопрос.

отаю над приложением, где я получаю ответы в формате HTML с сервера. Я использую bySpaceSecurityTrustHtml DomSanitizer и добавляю очищенный HTML в мой компонент ().

Моя проблема заключается в том, что некоторые элементы в ответе содержат теги, указывающие на то, что ссылка может быть построена из элемента, например:

<div thisIsActuallyaLink linkParam1="foo" linkParam2="bar">clickHere</div>

Я хотел бы создать директиву, которая применяется к innerhtml, но пока отображается html, она не компилируется с моей директивой ...

Если кому-то интересно, почему преобразование html не выполняется на стороне сервера: ответ используется в нескольких приложениях, и ссылки должны иметь разные относительные URL-адреса в зависимости от приложения :-(

 Günter Zöchbauer14 сент. 2017 г., 12:49
Это невозможно с[innerHTML]="..." вообще. Вы можете компилировать компоненты во время выполнения, чтобы получить компоненты и директивы для динамического HTMLstackoverflow.com/questions/38888008/...
 clearfix03 окт. 2017 г., 11:50
Я более внимательно посмотрел на это, и, похоже, он будет работать с компилятором AoT. Если вы отправите это как ответ, я отмечу это как правильное
 Günter Zöchbauer18 сент. 2017 г., 13:16
Я не знаю текущее состояние. Несколько месяцев назад состоялась дискуссия на эту тему, и выяснилось, что есть способы заставить ее работать вместе. Не уверен, что это улучшилось / ухудшилось с тех пор. Обсуждение было в вопросах Angular Github.
 clearfix18 сент. 2017 г., 13:14
Мне нужна AoT-компиляция для моего проекта. Динамический компонент выглядит многообещающе, но я предполагаю, что он не будет работать с AoT? Я решил разобрать html и преобразовать теги в простые ссылки во время 'ngAfterViewInit ()' на данный момент (потеряв одностраничную функциональность routerLinks).

Ответы на вопрос(2)

Решение Вопроса

[innerHTML]="..." вообще.
Вы можете компилировать компоненты во время выполнения, чтобы получить компоненты и директивы для динамического HTML.

ВидетьКак я могу использовать / создать динамический шаблон для компиляции динамического компонента с Angular 2.0? Больше подробностей.

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';

@Pipe({ name: 'safeHTML' })
export class SafeHtml implements PipeTransform {

    constructor(private sanitizer: DomSanitizer) { }

    transform(html: string) {
        return this.sanitizer.bypassSecurityTrustHtml(html)
    }
} 

и тогда[innerHtml]="htmlExample | safeHTML"

 clearfix18 сент. 2017 г., 13:07
Вот как работает домсанитизатор. Это похоже на то, что я уже делаю, но не использует угловые директивы (например, routerLink) во время компиляции, поэтому это не решает мой вопрос.

Ваш ответ на вопрос