从角度5

时间:2018-10-17 11:18:16

标签: angular angular6 angular-services angular-components

进一步阐述我的问题,

我有一个名为hero.service.ts的服务,该服务正在名为hero.component.ts的组件中使用。 hero.service.ts包含变量heros,它是array,包含许多项。

我正在通过称为heros的函数从hero.service.ts获取getHeroes()的值,该函数将变量返回为return this.heros;,并通过this.heros = this.heroService.getHeroes()获取组件上的值

在我的组件中,表格中列出了英雄。 当我从表中删除行时,它实际上也从heros的变量hero.service.ts中删除。

  • 为什么会这样?
  • 为什么它返回变量引用而不是一个值。

仅供参考,我通过使用heros之类的...扩展运算符返回return [...this.heros];来实现这一目标。但是为什么服务传递变量的引用。请帮助大家。

1 个答案:

答案 0 :(得分:1)

在JavaScript中,复杂数据类型(例如数组和对象)通过引用而不是通过值传递。

当您从服务中退回this.heros;时,您的组件未获得英雄数组。它引用了内存中的heroes数组。

因此,基本上,在这一点上,组件和服务中的heros属性都指向内存中的同一数组。

为解决此问题,您在return [...this.heros];时将英雄数组的元素散布到了动态创建的新数组中,然后将对该新创建数组的引用返回给您的组件。

那个时候,组件英雄指向内存中的另一个数组。因此,当您这样做时,您将获得预期的结果,即英雄将从组件阵列中删除,而不是从服务阵列中删除。

这是您推荐的StackBlitz