Но в моем приложении не только Массив Foos может получать обновления, но и каждый отдельный Foo может получать обновления, не затрагивая Массив.
Это не имеет смысла для меня. Если у вас есть массив, содержащий foos, и один из foos изменяется, этот массив по своей сути изменяется.
Если вы используете директиву ngFor
, распространение изменений в вашем шаблоне будет оптимизировано, поэтому вам не придется беспокоиться о повышенном DOM-подъеме в большинстве случаев использования: https://angular.io/api/common/NgForOf#change-propagation
Если вам нужно больше контроля, проверьте это: https://angular.io/guide/template-syntax#ngfor-with-trackby
Теперь, к вашим услугам, вы можете сделать это:
private foos = new BehaviorSubject<Foo[]>([]);
Затем создайте функцию, которая возвращает Observable для использования в вашем шаблоне:
get() {
return this.foos.asObservable();
}
Затем вы добавляете логику, чтобы изменить foos
так, как вам нравится, например, добавьте foo:
add(foo: Foo) {
let arr = this.foos.getValue();
arr.push(foo);
this.foos.next(arr);
}
Поменяйте foo:
change(index: number, foo: Foo) {
let arr = this.foos.getValue();
arr[index] = foo;
this.foos.next(arr);
}
Затем в вашем компоненте используйте fooService.get() | async