Что такое.подписывать в угловом?

Я использую приложение 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);
}

Ответы

Ответ 2

.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

Ответ 3

В Angular (в настоящее время на Angular-6) .subscribe() является методом типа Observable. Тип Observable - это утилита, которая выполняет асинхронную или синхронную потоковую передачу данных на различные компоненты или сервисы, которые подписались на наблюдаемые.

Наблюдаемое является реализацией/абстракцией в цепочке обещаний и будет частью ES7 в качестве предлагаемой и очень поддерживаемой функции. В Angular он используется внутри, поскольку rxjs является зависимостью для разработки.

Сама наблюдаемая может рассматриваться как поток данных, поступающих из источника, в Angular этот источник является конечной точкой API, службой, базой данных или другой наблюдаемой. Но сила в том, что он не ожидает ни одного ответа. Может иметь одно или несколько возвращаемых значений.

Ссылка на rxjs для просмотра/подписки на документы здесь: https://rxjs-dev.firebaseapp.com/api/index/class/Observable#subscribe-

Подписаться принимает 3 метода в качестве параметров, каждый из которых является функцией:

  • далее: для каждого элемента, испускаемого наблюдаемой, выполните эту функцию
  • ошибка: если где-то в потоке обнаружена ошибка, выполните этот метод
  • complete: после завершения всех элементов из потока выполните этот метод

.Внутри каждого из них есть потенциальная возможность направить (или связать) другие утилиты, называемые операторами, на результаты, чтобы изменить форму или выполнить некоторую многоуровневую логику.

В приведенном выше простом примере:

.subscribe(hero => this.hero = hero); в основном говорит об этом наблюдаемом берут героя, которого он выбрасывает, и устанавливают его на this.hero.

Добавление этого ответа, чтобы дать больше контекста Observables на основе документации и моего понимания.