Добавление/удаление компонентов на лету
Мне нужно иметь возможность добавлять и удалять угловые компоненты на лету. Для этого я использую методы 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 уничтожать компоненты должным образом или, по крайней мере, заставить его создавать новые?
Ответы
Ответ 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 воссоздается правильно.