NativeScript ListView не обновляется - PullRequest
0 голосов
/ 22 января 2020

Итак, у меня есть ListView, подобный этому

     <ListView height="150" [items]="countries">
            <ng-template let-country="item">
                <Image src={{country.imgSrc}}></Image>
                <Label text={{country.name}}></Label>
            </ng-template>
     </ListView>

У меня есть подписка на Observable, которая возвращает массив стран.

countries: any[] = [];

ngOnInit() {
   this.countryService.countriesUpdated.subscribe(
      (countries:any[]) => {
           this.countries = countries;
       {
   )
}

Когда страны обновляются. ListView не обновляет экран новым ListItem. Если вместо этого я инициализирую страны значением, он отображает ListItem. Я поместил кнопку на экране с прослушивателем касаний, тот console.log (this.countries). После нажатия, наконец, появляется новый ListItem. Разве привязка стран к ListView не должна автоматически обновляться?

NativeScript 6.0 Android 10

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Похоже, вы используете RxObservable подписку для заполнения своих товаров. Это означает, что вам нужно использовать asyn c pipe . Например, см. Здесь труба asyn c используется здесь для свойства списка items и того, как в коде позади вас заполняются элементы в подписка ( здесь и здесь ).

0 голосов
/ 25 января 2020

Нашел ответ здесь:

https://discourse.nativescript.org/t/listview-does-not-refresh-update-when-a-new-value-is-added/1492

Добавлена ​​приватная зона: NgZone в мой конструктор,

Затем обернул ответ подписки как это:

this.zone.run(()=>{
   me.countries= countries;
});
0 голосов
/ 23 января 2020

Обычно в этом сценарии вам нужно вызвать refre sh (). Я не использую angular, в javascript это будет что-то вроде

page.getViewById("listview").refresh();

и у него будет id = listview, например

<ListView id-"listview" height="150" [items]="countries">
...