什么是.subscribe有角度?

Sre*_*e11 50 angular

我正在通过角度巡回英雄应用程序,我在路由中遇到.subscribe方法.有人解释这里发生了什么?

app- http: //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);
}
Run Code Online (Sandbox Code Playgroud)

Mil*_*lad 102

.subscribe 不是Angular2的事情.

这是一个来自rxjsAngular在内部使用的库的方法.

如果您在订阅时事通讯时和订阅后可以想象自己,每次有新的时事通讯时,他们都会将其发送到您的家(订阅内部的方法被调用).

当您订阅杂志来源(他们Observablerxjs图书馆中称之为)时会发生这种情况

AJAXAngular中的所有调用都是在场景后面使用这个库,为了使用它们中的任何一个,你必须使用方法名称,例如get,然后调用subscribe,因为get返回和Observable.

此外,当你这样做时,<button (click)="doSomething()">Angular会Observables在场景后面使用并订阅你的东西,在这种情况下是一个click事件.

回到我们的比喻,Observables并且newsletter stores,在你订阅之后,只要有新的杂志,他们就会把它发送给你,除非你去和unsubscribe他们一起去,为此你必须要记住订阅号或ID,其中rxjs包含:

 let subscription = magazineStore.getMagazines().subscribe(
   (newMagazine)=>{

         console.log('newMagazine',newMagazine);

    }); 
Run Code Online (Sandbox Code Playgroud)

当你不想再获得杂志时:

   subscription.unsubscribe();
Run Code Online (Sandbox Code Playgroud)

同样,也是如此

 this.route.paramMap
Run Code Online (Sandbox Code Playgroud)

这是返回一个Observable,然后你订阅它.

我的个人观点是rxjs为JavaScript世界带来的最伟大的事情之一,它在Angular中更好.

有150个rxjs方法(非常类似于lodash方法)和你正在使用的方法被调用switchMap

  • 很棒的答案@Milad (4认同)
  • @pabloRN 几乎,但只被调用一次,当你订阅时,你还没有完成 (3认同)

Cal*_*lat 6

在Angular中(当前在Angular-6中).subscribe()是Observable类型的方法。Observable类型是一种实用程序,可以异步或同步地将数据流传输到已订阅了Observable的各种组件或服务。

可观察对象是对Promise链的一种实现/抽象,它将作为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提供更多上下文。


mur*_*a k 5

订阅是一个代表一次性资源的对象,通常是 Observable 的执行。订阅有一个重要的方法,取消订阅,它不带任何参数,只处理订阅所持有的资源。

import { interval } from 'rxjs';

const observable = interval(1000);
const subscription = observable.subscribe(a=> console.log(a));

/** This cancels the ongoing Observable execution which
was started by calling subscribe with an Observer.*/

subscription.unsubscribe();
Run Code Online (Sandbox Code Playgroud)

订阅本质上只有一个 unsubscribe() 函数来释放资源或取消 Observable 执行。

import { interval } from 'rxjs';

const observable1 = interval(400);
const observable2 = interval(300);

const subscription = observable1.subscribe(x => console.log('first: ' + x));
const childSubscription = observable2.subscribe(x => console.log('second: ' + x));

subscription.add(childSubscription);

setTimeout(() => {
// It unsubscribes BOTH subscription and childSubscription
subscription.unsubscribe();
}, 1000);
Run Code Online (Sandbox Code Playgroud)

根据官方文档,Angular 应该为你取消订阅,但显然,有一个错误。