Angular2 / typescript - 意外的数组行为(例如,当它确实不是时,长度为0)

时间:2016-10-04 20:37:53

标签: angular typescript

仅供参考我是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));

我想也许这两个问题有关系吗?我想我只是缺少一些基本的东西。

感谢您的任何见解。

2 个答案:

答案 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 ..为什么会这样?

很可能是订购问题。在数据实际从服务器返回后,您应该检查长度