IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 异步管道 AsyncPipe -> 正文阅读

[JavaScript知识库]异步管道 AsyncPipe

在本篇文章中,我将主要从四个方面来介绍异步管道
1、什么是异步管道
2、为什么使用异步管道
3、如何将AsyncPipe与Observable 、Promise结合在一起
4、如何将它与插值数据绑定和不同的指令(如 *ngIf 和 *ngFor)一起使用。

首先,什么是AsyncPipe?

来自angular官方文档:AsyncPipe会订阅一个Observable或者Promise并返回它发出的最近的一个值,当新值到来时,AsyncPipe会将该组件标记为需要进行变更检测,当组件被销毁时,AsyncPipe会自动取消订阅,以消除潜在的内存泄漏问题。
angular 异步管道允许订阅 angular 模板语法内的 observable,并负责自动取消订阅 observable。
让我们来看一个例子,这段代码的作用就是一个计数的,没过1s就将value+1并输出,

import { Component } from '@angular/core'
import { Observable } from 'rxjs'

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent {
  observable: Observable<number>

  ngOnInit() {
    this.observable = Observable.create(observer => {
      let value = 0
      const interval = setInterval(() => {
        observer.next(value)
        value++
      }, 1000)

      return () => clearInterval(interval)
    })
  }
}

现在我们想将该值在页面中显示出来,就可以引用该observable,并将它传入到异步管道中进行解析。

<p>{{ observable | async }}</p>

angular的httpclient本身返回的就是一个Observable,和AsyncPipe简直绝配。

为什么要使用异步管道?

这时候有一些人会说,平时直接用subscribe更新属性值也挺方便的,为什么要使用异步管道呢?
ok,现在思考一下如果不适用异步管道,我们上面的代码要多哪些内容呢?
1、需要再ngOnint中添加对observable的订阅

 this.subscription = this.observable.subscribe(
      value => (this.latestValue = value)
    )

2、为了防止内存泄漏,还需要添加unsubscribe,这就要使用钩子函数ngOnDestory(如果时httpclient返回的是可以不写的,挖个坑,后面另写一篇文章讲讲)

ngOnDestroy() {
    this.subscription.unsubscribe()
  }

看其他人的博客又学会了另一种写法,使用takeUntil 操作符负责取消订阅,这种方法在处理一个订阅中有多个 observable 时特别有用,我们不需要保留所有订阅的列表。

//subscribe
this.observable$
          .pipe(takeUntil(this.unsubscribe$))
          .subscribe(value => this.latestValue = value);
  
//unsubscribe
  ngOnDestroy(){
    this.unsubscribe$.next();
    this.unsubscribe$.complete();
  }

当使用 angular 异步管道时,这些额外的代码是不需要的,一旦组件被销毁,管道本身就会负责取消订阅 observable, 所以异步管道使我们的代码更干净。此外AsyncPipe使用的时onPush变更检测策略,对组件性能起到很好的作用,所以说我们应该尽可能多的去使用异步管道。

如何将AsyncPipe与NgIf、NgFor结合使用?

NgIf

<p *ngIf="(observable | async) > 5">{{ observable | async }}</p>

NgFor

<p *ngFor="let item of items | async">{{ item }}</p>

总结

始终相信一点:你所能想到的,angular都为你做好了。如果觉得本文对您有用,就点个赞吧

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:36:40  更:2021-08-18 12:36:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:08:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码