仅供参考我是Angular2的新手 - 基本上我正在调用一个数据服务,它返回一个对象数组的承诺,我在视图中绑定它并循环它们。它工作得很好,但我开始探索如何使用无限滚动,这需要我追加到数组,但我不能让它工作。
这是我在组件(typescript)中声明数组的方式:
integrationCollection: IntegrationEntity[] = [];
这是数据服务电话:
this.integrationService.getIntegrations().then(integrationCollection => this.integrationCollection = integrationCollection);
结果在页面上显示得很好。但是长度属性返回0 ..为什么会这样?
alert('integrationCollection count: ' + this.integrationCollection.length); // returns 0
另外,我需要能够添加到我的数组中以获得无限滚动方案,所以我认为我需要能够连接数组 - 但这根本不起作用(没有错误,但是页面上没有显示任何内容):
this.integrationService.getIntegrations().then(integrationCollection => this.integrationCollection.concat(integrationCollection));
我想也许这两个问题有关系吗?我想我只是缺少一些基本的东西。
感谢您的任何见解。
答案 0 :(得分:1)
这是因为框架的异步行为。更改以下代码:
this.integrationService.getIntegrations().then(integrationCollection => this.integrationCollection = integrationCollection);
alert('integrationCollection count: ' + this.integrationCollection.length);
为:
this.integrationService.getIntegrations().then(integrationCollection => {
this.integrationCollection = integrationCollection;
alert('integrationCollection count: ' + this.integrationCollection.length);
});
你看到了区别吗?当您需要Observable.forkJoin
时,还有其他方法可以在代码中引入同步行为。希望你明白了。
答案 1 :(得分:0)
在您的代码中:
integrationCollection => this.integrationCollection.concat(integrationCollection)
您可能想要在某处分配concat的结果,例如:
integrationCollection => this.integrationCollection = this.integrationCollection.concat(integrationCollection)
但是长度属性返回0 ..为什么会这样?
很可能是订购问题。在数据实际从服务器返回后,您应该检查长度。