Я ожидаю, что когда я установлю наблюдаемую подобную ситуацию, любые привязки будут использовать результат вызова switchMap
:
this.thing = this.route.paramMap.pipe(
switchMap(async (params: ParamMap) => {
const id = +params.get('id');
const data = await this.thingService.getThingDetails(id);
return new ThingDisplay(data);
})
)
Однако, если у меня есть несколько привязок в виде {{ (thing | async)?.prop }}
Я вижу, что сервисный метод называется для каждой из привязок .
Это означает, что каждое использование | async
создает независимую подписку на this.thing
Observable.
Как можно избежать этого?Я вижу угловые шаблоны, где я могу указать некоторый контекст, используя синтаксис let-*
.... но мне интересно, есть ли более прямой способ, чем указание целого шаблона, посвященного этому .... в последний раз, когда я использовалMVVM это был knockoutjs, так что определенно была контекстная привязка, которую вы могли бы использовать .... есть ли что-то похожее в angular?Мне не повезло найти что-либо, поэтому любой совет был бы оценен.
Мне в первую очередь интересно
- Должен ли я связываться с Observable в моем компоненте?
- Должен ли я использовать мою подписку Observable для установки переменной экземпляра?Мне это странно ...
- Почему
| async
заставляет Обсерваторию запускать каждый раз ? - Где я могу найти законно хорошую документацию по этому поводу?Похоже, что некоторые материалы покрыты документами angular, а некоторые - документами rxjs ... есть записи в блогах для каждой существующей версии angular, которые, возможно, устарели (с методами, которые я не могу найти, например
getValue
)... есть ли точный источник для что-нибудь в угловых (по крайней мере, в отношении наблюдаемых)?