Javascript 异步管道
我现在正在学习Angular的入门部分,有一部分我不明白 从购物车服务中,他们从app文件夹中的shipping.json获取数据Javascript 异步管道,javascript,angular,typescript,Javascript,Angular,Typescript,我现在正在学习Angular的入门部分,有一部分我不明白 从购物车服务中,他们从app文件夹中的shipping.json获取数据 HttpClient http; getShippingPrices() { return this.http.get('/assets/shipping.json'); } 然后在shippingComponent中调用方法: ngOnInit() { this.shippingCosts = this.cartService.getShippingPric
HttpClient http;
getShippingPrices() {
return this.http.get('/assets/shipping.json');
}
然后在shippingComponent中调用方法:
ngOnInit() {
this.shippingCosts = this.cartService.getShippingPrices();
在html模板中,必须使用异步管道
<div class="shipping-item" *ngFor="let shipping of shippingCosts | async">
我不明白,为什么我们必须使用异步管道
或者在没有异步管道的情况下也可以这样做吗?来自:
异步管道订阅一个可观察或承诺,并返回
它发出的最新值。当发出新值时,异步
管道标记要检查的零部件的更改。当组件
如果被销毁,异步管道将自动取消订阅以避免
潜在的内存泄漏
同样来自:
Angular利用可观测数据作为接口来处理各种问题
常见异步操作的定义。例如:
- 您可以定义自定义事件,这些事件从 子组件到父组件
- HTTP模块使用可观察对象来 处理AJAX请求和响应
- 路由器和表单模块使用 用于侦听和响应用户输入事件的可观察对象
async
管道呢?只需在应用程序上使用它,就可以享受反应式编程功能;) 来自:
异步管道订阅一个可观察或承诺,并返回
它发出的最新值。当发出新值时,异步
管道标记要检查的零部件的更改。当组件
如果被销毁,异步管道将自动取消订阅以避免
潜在的内存泄漏
同样来自:
Angular利用可观测数据作为接口来处理各种问题
常见异步操作的定义。例如:
- 您可以定义自定义事件,这些事件从 子组件到父组件
- HTTP模块使用可观察对象来 处理AJAX请求和响应
- 路由器和表单模块使用 用于侦听和响应用户输入事件的可观察对象
那么,为什么要避免使用
async
管道呢?只需在应用程序上使用它,就可以享受反应式编程功能;) 因为http.get
返回一个可观察的对象,而不是数据。如果不想使用异步管道,可以订阅或使用wait
this.shippingCosts=等待这个.cartService.getShippingPrices().first().toPromise()
因为http.get
返回一个可观察的对象,而不是数据。如果不想使用异步管道,可以订阅或使用wait
this.shippingCosts=等待这个.cartService.getShippingPrices().first().toPromise()代码>仅当您未订阅可观察对象时,才使用异步管道。这是最推荐的获取数据的方法,因为一旦数据丢失,您不必取消订阅,它会自动完成。正如您在这段代码中看到的,您不必订阅cartService.getShippingPrices()
ngOnInit(){
this.shippingCosts$=this.cartService.getShippingPrices();
}
{{shipping}
在这段代码中,您将得到相同的结果,但没有异步管道,但请记住,在本例中,您必须订阅cartService.getShippingPrices()。此外,一旦你完成了这个特殊情况下的数据,你将不得不取消订阅的可观
shippingCosts;
ngOnInit() {
this.cartService.getShippingPrices().subscribe((data) => this.shippingCosts = data);
}
<div class="shipping-item" *ngFor="let shipping of shippingCosts">{{ shipping }}</div>
运输成本;
恩戈尼尼特(){
this.cartService.getShippingPrices().subscribe((数据)=>this.shippingCosts=data);
}
{{shipping}
另一个重要的注意事项:请在持有可观测值的变量前面添加美元符号。在可观察变量的名称中使用美元符号被认为是最佳做法。这样很容易识别变量是否是可观察的
示例:shippingCosts$仅当您未订阅observable时才使用异步管道。这是最推荐的获取数据的方法,因为一旦数据丢失,您不必取消订阅,它会自动完成。正如您在这段代码中看到的,您不必订阅cartService.getShippingPrices()
ngOnInit(){
this.shippingCosts$=this.cartService.getShippingPrices();
}
{{shipping}
在这段代码中,您将得到相同的结果,但没有异步管道,但请记住,在本例中,您必须订阅cartService.getShippingPrices()。此外,一旦你完成了这个特殊情况下的数据,你将不得不取消订阅的可观
shippingCosts;
ngOnInit() {
this.cartService.getShippingPrices().subscribe((data) => this.shippingCosts = data);
}
<div class="shipping-item" *ngFor="let shipping of shippingCosts">{{ shipping }}</div>
运输成本;
恩戈尼尼特(){
this.cartService.getShippingPrices().subscribe((数据)=>this.shippingCosts=data);
}
{{shipping}
另一个重要的注意事项:请在持有可观测值的变量前面添加美元符号。在可观察变量的名称中使用美元符号被认为是最佳做法。这样很容易识别变量是否是可观察的
示例:shippingCosts$典型的异步或可观察操作需要订阅或等待构造,如下所示:
// async await example
async function getPrices(){
let prices = await this.cartService.getShippingPrices();
return prices;
}
使用async/await构造的代码在代码完成之前不会返回。“let prices=await”是所谓结束的签名,其功能与:
ngOninit(({
//subscription on observable example
getPrices.subscribe(prices=>{ //data returned here });
}
function getPrices(){
this.cartService.getShippingPrices();
}
正如你所看到的,这两种情况的结果都是价格。使用异步管道,代码会在将来的某个时候自动连接到结果。典型的异步或可观察操作需要订阅或等待构造,如下所示:
// async await example
async function getPrices(){
let prices = await this.cartService.getShippingPrices();
return prices;
}
使用async/await构造的代码在代码完成之前不会返回。“let prices=await”是所谓结束的签名,其功能与:
ngOninit(({
//subscription on observable example
getPrices.subscribe(prices=>{ //data returned here });
}
function getPrices(){
this.cartService.getShippingPrices();
}
尽你所能