Ответ 1
В угловой подписке используется Observable, здесь вы можете найти всю необходимую информацию
Я использую приложение angular-tour-of-heroes, и я столкнулся с методом.subscribe в маршрутизации. Может кто-нибудь объяснить, что происходит здесь?
Ссылка для app- https://embed.plnkr.co/?show=preview
Внутри файла hero-detail.component.ts,
ngOnInit(): void {
this.route.paramMap
.switchMap((params: ParamMap) => this.heroService.getHero(+params.get('id')))
.subscribe(hero => this.hero = hero);
}
В угловой подписке используется Observable, здесь вы можете найти всю необходимую информацию
.subscribe
- это не Angular2.
Это метод из библиотеки rxjs
, который Angular использует внутри.
Если вы можете представить себя при подписке на новостную рассылку и после подписки, каждый раз, когда появляется новая новостная рассылка, они отправляют ее к вам домой (вызывается метод внутри подписки).
Вот что происходит, когда вы подписываетесь на источник журналов (который они называют Observable
в библиотеке rxjs
)
Все вызовы AJAX
в Angular используют эту библиотеку за кулисами, и чтобы использовать любой из них, вы должны использовать имя метода, например, get
, а затем вызывать подписку на него, потому что get
возвращается и Observable
.
Кроме того, когда вы делаете это <button (click)="doSomething()">
, Angular использует Observables
за сценой и подписывает вас на этот источник вещей, который в данном случае является событием click
.
Возвращаясь к нашей аналогии с Observables
и newsletter stores
, после того, как вы подписались, как только и когда появится новый журнал, они отправят его вам , если вы не поедете и unsubscribe
из им, для этого вам нужно запомнить номер или идентификатор подписки, который в rxjs
будет выглядеть так:
let subscription = magazineStore.getMagazines().subscribe(
(newMagazine)=>{
console.log('newMagazine',newMagazine);
});
А когда ты больше не хочешь получать журналы:
subscription.unsubscribe();
Кроме того, то же самое относится и к
this.route.paramMap
который возвращает Observable
, а затем вы подписываетесь на него.
Лично я считаю, что rxjs
был одним из величайших достижений в мире JavaScript, и еще лучше в Angular.
Существует 150 методов rxjs
(очень похожих на методы lodash
), и тот, который вы используете, называется switchMap
В Angular (в настоящее время на Angular-6) .subscribe()
является методом типа Observable. Тип Observable - это утилита, которая выполняет асинхронную или синхронную потоковую передачу данных на различные компоненты или сервисы, которые подписались на наблюдаемые.
Наблюдаемое является реализацией/абстракцией в цепочке обещаний и будет частью ES7 в качестве предлагаемой и очень поддерживаемой функции. В Angular он используется внутри, поскольку rxjs является зависимостью для разработки.
Сама наблюдаемая может рассматриваться как поток данных, поступающих из источника, в Angular этот источник является конечной точкой API, службой, базой данных или другой наблюдаемой. Но сила в том, что он не ожидает ни одного ответа. Может иметь одно или несколько возвращаемых значений.
Ссылка на rxjs для просмотра/подписки на документы здесь: https://rxjs-dev.firebaseapp.com/api/index/class/Observable#subscribe-
Подписаться принимает 3 метода в качестве параметров, каждый из которых является функцией:
.Внутри каждого из них есть потенциальная возможность направить (или связать) другие утилиты, называемые операторами, на результаты, чтобы изменить форму или выполнить некоторую многоуровневую логику.
В приведенном выше простом примере:
.subscribe(hero => this.hero = hero);
в основном говорит об этом наблюдаемом берут героя, которого он выбрасывает, и устанавливают его на this.hero
.
Добавление этого ответа, чтобы дать больше контекста Observables на основе документации и моего понимания.