Подтвердить что ты не робот

Добавление/удаление компонентов на лету

Мне нужно иметь возможность добавлять и удалять угловые компоненты на лету. Для этого я использую методы loadIntoLocation и dispose:

Добавление компонента (из диспетчера макетов):

this.m_loader.loadIntoLocation(MyComponent, this.m_element, 'content').then(_componentRef => {

    // Create the window and set its title:
    var component: MyComponent = (_componentRef.instance);
    component.ref = _componentRef;

    // init the component content
});

Удаление компонента (из компонента):

this.ref.dispose();

Это почти работает: - если я добавляю компонент и закрываю его, он работает - если я добавляю несколько компонентов, они работают - но если я добавляю компонент A, затем удаляю его, затем добавляю компонент B, мне кажется, что Angular дает мне ссылка на A, и сохраняет некоторые старые значения (мои компоненты перетаскиваются, и в этом случае B будет создан A, когда я его уничтожил)

Есть ли способ заставить Angular уничтожать компоненты должным образом или, по крайней мере, заставить его создавать новые?

4b9b3361

Ответ 1

Как было предложено Тимом,

quoting @tbosch comment

Angular повторно использует ранее созданные элементы DOM по умолчанию

Чтобы избежать такого поведения, взятого из комментария, вы можете использовать APP_VIEW_POOL_CAPACITY и назначить его 0 как значение.

bootstrap(MyApp, [provide(APP_VIEW_POOL_CAPACITY, {useValue: 0})])

Update

Обратите внимание, что поскольку beta.1 APP_VIEW_POOL_CAPACITY был удален с помощью # 5993 и DOM воссоздается правильно.