Ngx-charts не может загружать гистограммы напрямую с помощью async pipe в angular

Моя проблема похожа на эту ​​запись stackoverflow

Когда я использую асинхронный канал для просмотра данных из firebase и отображения их на диаграмме, я могу видеть диаграмму, но выводить на консоль нулевую ошибку. Без async pipe все ошибки исчезнут, но я не могу получить данные (да, это асинхронные данные). Помоги мне, пожалуйста.

Гистограмма

Код гистограммы

Ошибка

Пустая диаграмма


person phonemyatt    schedule 15.12.2017    source источник


Ответы (1)


Причина

Это происходит потому, что компонент не может работать со значениями null для results.

Почему?

Асинхронный канал, как вы говорите, используется, когда вы не хотите (или не должны) подписываться в коде компонента, а вместо этого делаете это в шаблоне. Однако pipe - это чистая функция: она должна возвращать что-то при каждом вызове.

Когда асинхронный канал вызывается до того, как данные поступают с сервера, канал возвращает null, не имея лучшего значения для предложения.

Судя по снимку трассировки ошибки, похоже, что ngx-charts-bar-vertical не работает, когда для results установлено значение null, и тогда он ломается.

Исправление

Вам не нужно вообще отображать компонент линейчатой ​​диаграммы, пока данные отсутствуют. Вы можете сделать это с помощью директивы NgIf, которая позволяет выполнять привязку в шаблоне с помощью as. Очень полезно именно в тех случаях, когда вы хотите условно показать часть шаблона, но затем повторно использовать это значение снова.

<ngx-charts-bar-vertical *ngIf="surveyAnswers | async as answers"
                         [results]="answers"
></ngx-charts-bar-vertical>

Пока surveryAnswers observable ничего не испускает, компонент не будет воспроизведен, поэтому ошибки не будет. Когда он излучает, async pipe поймает это, запустит CD, и он больше не будет null - это будет истинное значение, которое затем будет передано в переменную с именем answers, которую мы используем для подачи на results вход компонента. .

person Lazar Ljubenović    schedule 15.12.2017
comment
это место на ответ. сохраните этот ответ для использования в будущем. Я пытался преобразовать из наблюдаемого в массив, и это меня еще больше сбивает с толку. Большое вам спасибо за этот ответ. - person phonemyatt; 15.12.2017
comment
У меня такая же проблема, но все равно возникают те же ошибки. Я получаю данные из своего магазина с помощью ngrx. Я выбираю данные в своем конструкторе и назначаю их Observable<ChartData>. - person AndreaM16; 17.12.2017
comment
любые мысли об этом stackoverflow.com/questions/53609566/? - person sreginogemoh; 04.12.2018