Angular 离子2:*ngFor与一个对象

Angular 离子2:*ngFor与一个对象,angular,typescript,ionic2,pipe,Angular,Typescript,Ionic2,Pipe,我使用Ionic 2并尝试显示键值数组的内容。我使用一个对象 为了显示我的收藏,我在html中使用了一个管道。 这是我的html: <ion-list> <ion-item *ngFor="let event of this.pdata.array | mapToIterable">Toto</ion-item> </ion-list> 问题:我用异步方法设置了“数组”,但我的管道只加载了一次。所以我的“数组”不是空的,但我的“tot

我使用Ionic 2并尝试显示键值数组的内容。我使用一个对象

为了显示我的收藏,我在html中使用了一个管道。 这是我的html:

<ion-list>
    <ion-item *ngFor="let event of this.pdata.array | mapToIterable">Toto</ion-item>
  </ion-list>
问题:我用异步方法设置了“数组”,但我的管道只加载了一次。所以我的“数组”不是空的,但我的“toto”不显示

我的异步方法是在提供程序中设置的。它在查询web服务后设置我的“数组”。我的页面构造函数调用提供程序的函数来设置“数组”,并在视图中显示变量

这是我的提供商代码(p-data.ts):

如何强制管道刷新

如果管道返回
承诺
可观察
,则需要使用
| async
管道类

 <ion-item *ngFor="let event of this.pdata.array | mapToIterable | async">
这会影响性能,或者在更新阵列后使用其他阵列替换阵列

this.array[data_guid] = new CData(data_guid, object.name, object.old);
this.array = this.array.slice();

根据它的大小,它可能也很昂贵

如果您的代码能够显示如何使用“异步方法”,这将非常有用。是的,请添加代码。描述很模糊。我找不到
getDatas()
和你的pipe.Updated之间的连接。我希望这次能有所帮助。我的管道没有调用methode getDatas()。我页面的.ts文件调用它。我的管道不会返回承诺。我在提供者中进行调用。如果在管道中进行异步调用,则需要返回
承诺
可观察
。您不太可能解决这个问题。我尝试在对象中使用slice()时出错:类型“{[guid:string]:CData;}”上不存在属性“slice”。我试图使我的管道不纯净,但它不起作用:我的页面被阻塞(我想是无限循环),我的“toto”也不显示。好的,如果它是一个对象(命名对象
array
有点混乱;-),你可能需要使用
var tmp=this.array;this.array={};赋值(this.array,tmp)我认为最好重新考虑您的数据结构,或许可以使用可观测数据来主动通知模型更改。
import { Component } from '@angular/core';

import {NavController, Platform} from 'ionic-angular';
import {PData} from "../../providers/p-data";
import {DetailsMedicalEventPage} from "../details-medical-event/details-medical-event";
import {PTranslate} from "../../providers/p-translate";

@Component({
  selector: 'page-to-come',
  templateUrl: 'to-come.html'
})
export class ToComePage {


  constructor(public navCtrl: NavController, public pdata : PData, public translate : PTranslate) {
    this.pdata.getDatas();
  }

}
 <ion-item *ngFor="let event of this.pdata.array | mapToIterable | async">
@Pipe({name: "...", pure: false})
this.array[data_guid] = new CData(data_guid, object.name, object.old);
this.array = this.array.slice();