Angular: привязка после createElement не работает - PullRequest
0 голосов
/ 28 сентября 2018

У меня странная проблема.

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

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 мс, и это та же проблема.Так что это не подписка, это проблема времени ...

Так что я надеюсь, что это понятно, и, пожалуйста, у всех есть хорошая идея, потому что не может понять ^^

...