Я действительно бьюсь головой об стену этим ...: - \
У меня есть тупой компонент, который с @Input()
получает массив:
export class ChildComponent implements OnChanges {
@Input() items: Item[];
ngOnChanges(changes: SimpleChanges) {
console.log('ngOnChanges fired:', changes['items'].currentValue.length)
}
}
Родительский компонент передает массив дочернему компоненту через привязку шаблона и async
канал:
<h1>Parent Component</h1>
<child [items]="items$ | async"></child>
Я понимаю, что изменения должны автоматически обнаруживаться при использовании канала async
с @Input()
, позволяя обрабатывать их в хуке жизненного цикла ngOnChanges
.
Это правильно?
Однако ngOnChanges
не запускается в дочернем компоненте когда items$
испускает новое значение.
У меня есть класс DataStore
, который поддерживает этот наблюдаемый массив элементов. По мере получения новых элементов он генерирует новый массив (неизменяемый) и проталкивает его через наблюдаемый items$
. Однако в дочернем компоненте изменений не обнаружено. Если я немного щелкну по странице, в конечном итоге сработает обнаружение изменений, и оно обновится. там отлично работает !!!!
Итак, я знаю, что мой реальный код отличается от упрощенного примера, но мне не удалось его отследить.
Вот почему мой вопрос:
Как отлаживать Rx JS / Angular?
Я добавил логирование в items$
внутри родительский компонент, и я вижу, что новые значения поступают нормально, но дочерний компонент их не получает. Я вижу, что ngOnChanges
не запускается в дочернем компоненте.
Я подумал, что, возможно, наблюдаемая ссылка items$
где-то переназначалась, оставляя шаблон с подпиской на наблюдаемый, который на самом деле не получает новых выбросов, поэтому я сделал @Input()
геттером / сеттером, который мог бы отслеживать каждый раз, когда он был установлен, и это происходит только один раз.
I пытался изменить дочерний компонент, чтобы использовать стратегию обнаружения изменений OnPush
, но это не дало результата.
Я в тупике ...
Любые предложения о том, как Я могу отследить свою проблему?
Спасибо! : -)