Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Принудительная перерисовка компонента (https://javascript.ru/forum/angular/79113-prinuditelnaya-pererisovka-komponenta.html)

sniffysko 19.12.2019 11:08

Принудительная перерисовка компонента
 
Есть проблема. При внесении изменений в данные компонент не перерисовывается.
Данные:
[
    {
        "id": 55,
        "name": "Интерфейс",
        "type": "section",
        "children": [
            {
                "id": 56,
                "parent_id": 55,
                "name": "01. Максимальная ширина диалога",
                "type": "string",
                "value": "600"
            },
            {
                "id": 57,
                "parent_id": 55,
                "name": "02. Максимальная высота диалога",
                "type": "string",
                "value": "800"
            }
        ]
    },
    {
        "id": 2,
        "name": "Общие настройки приложения",
        "type": "section",
        "children": [
            {
                "id": 47,
                "parent_id": 2,
                "name": "01. Титул в названиии сайта",
                "type": "string",
                "value": "Академия ДТЭК"
            },
            {
                "id": 52,
                "parent_id": 2,
                "name": "02. Адрес smtp сервера",
                "type": "string",
                "value": "smtp.dtek.com"
            }
        ]
    }
]

Все это выводится в виде mat-expansion-panel и может редактироваться.
Верхний уровень это рубрики, а все что в children, это содержимое expansion-panel. Если редактировать верхний уровень, то изменения отображаются корректно. Но если отредактировать дочерний элемент, то ангуляр не видит изменений и, соответственно, компонент не перерисовывает. Я ставил отлов события ngOnChanges и судя по ним изменений никто не видит. При этом, вывод в консоль говорит о том, что данные изменились.
От большой печали после внесения изменений в переменную данных, поставил detectChanges() но это результатов не дало.
Как заставить приложение принудительно перерисовать компонент?

destus 20.12.2019 05:25

Цитата:

поставил detectChanges() но это результатов не дало
а вы попробуйте markForCheck(), он же как раз действует от компонента в котором вызываем и вверх по иерархии. Ну или создайте тестовый пример в какой-нибудь онлайн IDE, например https://stackblitz.com/

sniffysko 20.12.2019 21:04

markForCheck() тоже пробовал.
На счет stackblitz.com это вы хорошо посоветовали. Надо собраться. :о) Проект большой и эту задачу пока отложил. Ошибка неприятная, но не критичная. Теперь уже наверное до посленовогодних дней.


Часовой пояс GMT +3, время: 18:25.