Ionic2 ng для ввиду не обновляется

1

У меня есть список элементов в моем приложении, распечатывающий их в * ngFor. Когда приложение возобновляется, я вызываю метод для загрузки новых элементов с сервера, выполняя http-Request. Внутри этого метода я устанавливаю элементы как элементы массива.

Однако массив не обновляется в представлении. Если я делаю pull-to-refresh (на котором я вызываю тот же метод), элементы в представлении обновляются.

Я попробовал обернуть часть моего кода, который переопределяет старый массив в ngZone .run() или setTimeout() но ничего не работает. Также пробовал с ChangeDetectorRef, также безуспешно.

Теперь у меня нет идей...

Вот что я пробовал до сих пор:

this.zone.run(() =>{
   this.posts = posts; // "posts" is the array of elements i got from http-request
                       // "this.posts" the array for the view
});

а также

setTimeout(() => {
   this.posts = posts;
}, 10);

а также

this.posts = posts;
this.changedetectorRef.detectChanges(); //also tried markForCheck()

МОЙ КОД:

Посмотреть:

<ion-item-sliding *ngFor="let post of posts" >
    <ion-item>
        <p>{{post.newdistance}}</p>
    </ion-item>
</ion-item-sliding>

соответствующий файл.ts:

loadPosts() {
  let loading = this.loadingController.create({
    content: "Einen Moment bitte...",
    spinner: "crescent"
  });

  loading.present();

  this.postsService.getPostsFromServer().then(posts => {

    posts.forEach((post, index) => {

        this.geolocationService.getDistance(post.latitude, post.longitude).then(distance => {
            post.newdistance = distance;
        });

    });

    this.posts = posts; // <---- what to do here ???
    loading.dismiss();

  })
  .catch(() => {
    loading.dismiss();
  });
}

Помогите мне, пожалуйста!

ОБНОВИТЬ

Когда я добавляю предупреждение и сравниваю значение старого сообщения с новым, оба обновляются. Проблема, безусловно, в не обновляющемся виде

ОБНОВЛЕНИЕ 2

Я заметил, когда я добавляю кнопку в представление, на котором я вызываю ту же функцию, просмотр также обновляется... он просто не обновляется, когда я возобновляю приложение...

  • 1
    Можете ли вы показать, пожалуйста, больше кода.
  • 0
    приложение возобновлено, вы имеете в виду переключение пользователей между приложениями?
Показать ещё 1 комментарий
Теги:
angular
ionic3
ionic2

1 ответ

0

this.posts = posts; часть вашего кода выполняется, возможно, до

this.geolocationService.getDistance(post.latitude, post.longitude).then(distance => {
            post.newdistance = distance;
        });

Я говорю "возможно раньше", потому что это обещание, вы не можете быть уверены, когда именно оно вернется. Таким образом, значение newdistance устанавливается после назначения posts на this.posts.

Лучший способ справиться с этим - объединить свои методы обещания, которые должны выполняться один за другим, а не параллельно.

Другой (более простой способ) заключается в том, чтобы выталкивать каждый post в this.posts только после того, как он получил значение newdistance. Имейте в виду, что вы должны использовать новый массив для ввода сообщений, например:

  //at the top of you page declare a new postsArray variable
  postsArray = [];
  this.postsService.getPostsFromServer().then(posts => {

    posts.forEach((post, index) => {

        this.geolocationService.getDistance(post.latitude, post.longitude).then(distance => {
            post.newdistance = distance;
            // Here we push the new post into the posts array
            this.postsArray.push(post);
        });

    });

    loading.dismiss();

  })
  .catch(() => {
    loading.dismiss();
  });
  • 0
    Если я использую новый массив , какой из них я ссылаюсь в представлении? Или когда я помещаю содержимое нового массива в this.posts ?
  • 0
    я просто удалил часть geolocationService , но все остальные свойства объекта post также не обновляются в представлении ... просто, если я делаю тягу для обновления, она работает нормально ... я так растерялся
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню