Это происходит потому, что вы меняете наблюдаемое на другой наблюдаемый экземпляр. ngFor обнаруживает, что повторно отображает dom, когда установлена новая наблюдаемая . Правильный способ работы состоит в том, чтобы не устанавливать новую наблюдаемую вещь, это просто помещать новые элементы в наблюдаемую .
Вот пример стекаблика, который применяет этот подход, вы увидите, чтоdom не перерисовывается: https://stackblitz.com/edit/angular-wslaz7
Я не знаю, почему пример со статическими данными не перерисовывает dom, может быть, это побочный эффект, когда вся операция 'sync', поскольку, если я добавлю delay () после of (), например:
this.episodes = of([
{id: 1, name: "name1"},
{id: 2, name: "name2"}
]).pipe(delay(100));
, вы увидите, что он будет перерисовывать элементы.
Мы могли бы спросить команду angular, почемуне рендерится, когда не применяется delay (), я понятия не имею.
Надеюсь, это поможет!