Как заставить Angular 2 подбирать динамически добавленную директиву routerLink

Как видно из этого плункера, я динамически добавляю HTML к одному из моих элементов, что сводится к следующему:

@Component({
    selector: 'my-comp',
    template: `<span [innerHTML]="link"></span>`,
}) export class MyComponent {
    private linkContent = '<a routerLink="/my-route">GoTo Route</a>';
    private link;

    constructor(sanitizer: DomSanitizer) {
        this.link = sanitizer.bypassSecurityTrustHtml(linkContent);
    }
}

Это приводит к добавлению <a routerLink="/my-route">GoTo Route</a> в DOM, но Angular ничего не знает о директиве routerLink для этого элемента и не «привязывается» к нему. Итак, когда вы щелкаете ссылку, это приводит к полной перезагрузке с повторной загрузкой (что не работает в plunk, а просто дает 404).

Вопрос: как указать angular пройти через DOM (или его часть, или даже отдельный элемент) и при необходимости выполнить инициализацию компонента?


person Dethariel    schedule 07.09.2016    source источник
comment
Я не уверен, понял ли я, что вы хотите здесь сделать, но, судя по вашему Plunker, ваша проблема в том, что ссылка login не работает, верно? Если да, то почему вы используете routerLink внутри своей локализации, а не в своем шаблоне?   -  person brians69    schedule 08.09.2016
comment
Привет .. Как вы решили проблему динамического добавления ссылки на маршрутизатор в тег привязки из класса скрипта типа? Я очень старался создать динамический компонент, но безуспешно. Пожалуйста, помогите мне.   -  person Meenakshi Kumari    schedule 11.08.2017
comment
@MeenakshiKumari В конце концов я не пошел по этому пути, а реструктурировал свой код, чтобы вместо этого не было динамических ссылок   -  person Dethariel    schedule 16.08.2017
comment
Собственно то же самое сделал .. Спасибо ..   -  person Meenakshi Kumari    schedule 18.08.2017


Ответы (1)


Angular2 не обрабатывает HTML, добавляемый динамически, кроме очистки.

Передача '<a routerLink="/my-route">GoTo Route</a>' в innerHTML делает именно это, передавая эту строку в DOM, но ничего больше. Директива routerLink не создается или не применяется.

Если вам нужно динамически добавить HTML, который использует привязки, директивы или компоненты Angular2, вы можете добавить HTML в шаблон компонентов и добавить этот компонент динамически, используя ViewContainerRef.createComponent(), как показано, например, в Angular 2 динамические вкладки с выбранными пользователем компонентами

person Günter Zöchbauer    schedule 08.09.2016