在 Angular 中管道与订阅

Pipe vs Subscribe in Angular

我希望每个人都过得很好。可以,请大佬说清楚pipesubscribe选哪个,为什么?不仅要获得响应,还要初始化一些其他变量或更改布尔变量。

另请查看代码。这是正确的做法吗?

public getAlbums(){
    this.enableLoader = false;
    this.albumHttpService.getAlbums()
        .pipe(
            map((response) => {
                this.enableLoader = false;
                if (!response.albums.length) {
                    this.noDataSet = true;
                    if (response.albums === null) {
                        this.list = [];
                    }
                }
                else{
                    this.noDataSet = false;
                    this.list = response.albums;
                }
            }),
            catchError((error) => {
                this.noDataSet = false;
                this.data = [];
                throw new Error(error);
            }) 
        )
        .subscribe();
}

提前致谢

pipe 中,您可以连接许多其他函数并使用这些函数编写一些逻辑、为视图准备数据等。

subscribe 就像最后一点,你准备好数据,最好不要在那里写任何逻辑,只分配给你的视图模型等。

Pipe 基本上获取函数的输出并将其作为另一个函数的输入。这是一种非常棒且高效的数据处理方式,而且非常强大。

我们基本上是将某些东西的输出通过管道传输到一个不同的函数中,该函数可以修改传入的数据,或者只是在数据之上添加额外的逻辑(触发副作用)。

我们可以在 pipe 运算符中链接多个逻辑。

Subscribe 在 observable 上调用以订阅从 observable 推出的最终数据。

快速示例: 我有一个发送字符串 "World".

的可观察对象
worldObservable$.pipe(
  tap(data=>console.log(data)), // Prints "World"
  map(data=> `Hello ${data}`)
)
.subscribe(data=>console.log(data)); // Prints "Hello World"

在这个例子中,我首先使用tap获取数据,然后记录它。 接下来,我使用更改初始数据的 map 运算符修改数据。 当我订阅时,它会记录修改后的数据,而不是初始数据。

我希望它能让你更清楚。