Асинхронное изменение элемента в BehaviorSubject - PullRequest
0 голосов
/ 31 мая 2018

Я столкнулся с проблемой.Я использую сервис для хранения массива, в родительском компоненте, который я делаю Для массива, и я передаю дочернему компоненту элемента массива, массив BehaviorSubject, оба компонента имеют стратегию Onpush, из дочернего компонента вызывающий методменяет элемент массива через сервис.Таким образом, если изменения вносятся сразу, то изменения отрисовываются в дочернем компоненте, а если есть задержка, то нет.

Как я могу решить проблему?

stackbiz:https://stackblitz.com/edit/angular-vywwsb

1 Ответ

0 голосов

Вот решение Stackblitz

Я предполагаю, что проблема связана с некоторой ошибкой, связанной с неизменностью immutable.js и обнаружением изменения угла.Исправление, которое я применил, состоит в том, чтобы просто передавать данные, поступающие из потока, через функцию, которая создает и возвращает новый объект, так что ngChangeDetection может быть запущен.

* В следующем коде данные синпета - BehaviorSubjec т из immutable.js List BehaviorSubject(List(array_of_objects));

// OLD
<ng-container *ngFor="let item of (data |async );
                trackBy: trackByFn;
                let first = first">
            {{item['list'].send}}
            <app-item [item]="item" [first]="first"></app-item>
</ng-container>

//FIX
<ng-container *ngFor="let item of (data |async );
                trackBy: trackByFn;
                let first = first">
            {{item['list'].send}}
            <app-item [item]="func(item)" [first]="first"></app-item>
</ng-container>

//WHERE func

func(obj){
return ({...obj})
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...