У меня странная проблема.
Я использую обычное нг новое приложение.В этом приложении я запускаю следующий код:
getChildComponent(type: string, apiUrl: string) {
type = 'grid-element';
this.appendCustomElement(type, '../assets/main.js', document.getElementById('ElementBox'), apiUrl);
}
private appendCustomElement(name: string, url: string, target: HTMLElement, apiUrl: string) {
if (!customElements.get(name)) {
console.log('define element');
var script = document.createElement("script");
script.src = url;
document.head.appendChild(script);
}
const component = document.createElement(name);
component.setAttribute('apiurl', apiUrl);
target.innerHTML = '';
target.appendChild(component);
}
Я создаю два элемента.Первый элемент загружает main.js из моего дочернего компонента.Этот js-файл содержит полный сценарий компонента.
Второй элемент создает html-тег и помещает его в DOM.
Я запускаю getChildComponent () по событию click.Это отлично работает.Дочерний компонент загрузится полностью.Моя проблема, если я загружаю компонент снова.Сначала скрипт работает нормально.- Это улучшает тег HTML - Он запускает функции в дочернем компоненте - получает все результаты в дочернем компоненте
, но не перезагружает переменные и массивы в html.Простой пример: я создаю в дочернем компоненте переменную test: string = '';и показать его в HTML {{test}}.Тест заполняется в ngOnInit и подписке.
ngOnInit() {
this.test = 'blubb1';
this.getApiResult();
}
async getApiResult() {
const result = this.httpClient.get<any[]>(this.apiurl);
result.subscribe(res => {
this.test = 'blubb2';
});
}
При первом создании элементов в HTML-файле blubb2.На втором ходу идет blubb1.Поскольку весь код после подписки больше не меняется.
Для Info я пробую его с функцией TimeOut с задержкой 1000 мс, и это та же проблема.Так что это не подписка, это проблема времени ...
Так что я надеюсь, что это понятно, и, пожалуйста, у всех есть хорошая идея, потому что не может понять ^^