进一步阐述我的问题,
我有一个名为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];
来实现这一目标。但是为什么服务传递变量的引用。请帮助大家。
答案 0 :(得分:1)
在JavaScript中,复杂数据类型(例如数组和对象)通过引用而不是通过值传递。
当您从服务中退回this.heros;
时,您的组件未获得英雄数组。它引用了内存中的heroes数组。
因此,基本上,在这一点上,组件和服务中的heros属性都指向内存中的同一数组。
为解决此问题,您在return [...this.heros];
时将英雄数组的元素散布到了动态创建的新数组中,然后将对该新创建数组的引用返回给您的组件。
那个时候,组件英雄指向内存中的另一个数组。因此,当您这样做时,您将获得预期的结果,即英雄将从组件阵列中删除,而不是从服务阵列中删除。
这是您推荐的StackBlitz。