Ng не работает при подписке на тему сервиса - PullRequest
0 голосов
/ 11 апреля 2019

в приложении Angular 7 моя директива ngFor не работает и также не выдает никаких ошибок.Так работает приложение

  1. Компонент вызывает сервис во время OnInit и одновременно подписывается на тему сервиса.
  2. Во время этого вызова служба извлекает некоторые данные, и когда это делается, я отправляю часть этих данных компоненту.
  3. Я вижу данные в компоненте, но ngFor не выдает ожидаемого результата.Он ничего не производит в принципе, как будто данные никогда не поступали.Можете ли вы помочь?

Проект здесь .

Ответы [ 3 ]

4 голосов
/ 11 апреля 2019

Вы должны изменить changeDetection компонента на Default, просто удалив эту строку или используя вместо нее ChangeDetectionStrategy.Default.

Стратегия OnPush отключает автоматическое обнаружение изменений.


Если у вас есть причина использовать стратегию OnPush в вашем компоненте, то вы должны вручную активировать обнаружение изменений

Для этого вам нужно вставить ChangeDetectorRef в ваш компонент:

constructor(private cdr: ChangeDetectorRef)

И вызвать его после загрузки данных:

getData.subscribe(images => {
  // do something
  this.cdr.detectChanges();
});
1 голос
/ 11 апреля 2019

Это потому, что вы используете «OnPush» и не запускаете обнаружение изменений при получении ваших изображений.

Вы можете либо ввести ChangeDetectorRef и позвонить на него markForCheck() после назначения ваших изображений на this.images, но, что еще лучше, вы не должны самостоятельно обрабатывать подписку и "разворачивать" свои наблюдаемые:

  • превратить изображения в наблюдаемые
  • непосредственно присвоить наблюдаемое, возвращаемое службой, этому полю
  • используйте AsyncPipe в вашем шаблоне
0 голосов
/ 11 апреля 2019

перед * ng. Для вас необходимо иметь div, а div должен иметь условие * ngIf после извлечения данных из службы, тогда только true * ngIf. Теперь все работает, попробуйте это.

...