Ваша отписка в ngOnDestroy
работает.
Вы получаете старые значения в вашем компоненте, потому что вы используете ReplaySubject
. A ReplaySubject
кэширует все значения, которые передаются вместе с ним. Поэтому каждый раз, когда вы подписываетесь на эту тему, ваш метод подписки вызывается для каждого значения, которое вы указали для этого ReplaySubject
.
Размер буфера можно изменить с помощью:
// Only the last emitted value is cached and emitted to every new subscriptions
private startedEditing = new ReplaySubject<number>(1);
Если вы хотите получить только последнее переданное значение, вы также можете использовать BehaviourSubject
.
Но я думаю, вы просто хотите использовать простой Subject
.