В JavaScript сложные типы данных, такие как массивы и объекты, передаются по ссылке, а не по значению.
Когда вы вернули this.heros;
из своего сервиса, ваш компонент не получил массив героев.Он получил ссылку на массив героев в памяти.
Таким образом, на этом этапе оба свойства героев в вашем Компоненте, а также в Сервисе, указывали на один и тот же Массив в памяти.
Чтобы исправить это, когда вы сделали return [...this.heros];
, на этот раз он распространил элементы массива героев в новый массив, созданный на лету, а затем вернул ссылку на этот вновь созданный массив в ваш компонент.
В то время герои-компоненты указывали на другой массив в памяти.Следовательно, когда вы это сделаете, вы получите ожидаемый результат, когда герой будет удален из массива компонентов, но не из массива служб.
Вот StackBlitz для вашегоисх.