在 Angular 中管道与订阅
Pipe vs Subscribe in Angular
我希望每个人都过得很好。可以,请大佬说清楚pipe和subscribe选哪个,为什么?不仅要获得响应,还要初始化一些其他变量或更改布尔变量。
另请查看代码。这是正确的做法吗?
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
运算符修改数据。
当我订阅时,它会记录修改后的数据,而不是初始数据。
我希望它能让你更清楚。
我希望每个人都过得很好。可以,请大佬说清楚pipe和subscribe选哪个,为什么?不仅要获得响应,还要初始化一些其他变量或更改布尔变量。
另请查看代码。这是正确的做法吗?
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
运算符修改数据。
当我订阅时,它会记录修改后的数据,而不是初始数据。
我希望它能让你更清楚。