Angular中利用rxjs库的Subject多播解决在第一次订阅时进行初始化操作(如第一次订阅时从服务器获取数据)
2021-03-12 23:28
标签:变化 blank bsp 现在 less operator ted pps angular rxjs 库中 Subject 类可以用于实现多播,其本身已经有多个实现(可参考【Rxjs】 - 解析四种主题Subject),但是都是需要手动操作Subject对象进行发布。 这里通过继承 BehaviorSubject(Subject的实现类,也可以直接继承Subject,但这里考虑到可能会用到初始值的时候)实现在第一次订阅(调用subscribe方法)时进行初始化(可以从服务器获取数据)。 Angular中利用rxjs库的Subject多播解决在第一次订阅时进行初始化操作(如第一次订阅时从服务器获取数据) 标签:变化 blank bsp 现在 less operator ted pps angular 原文地址:https://www.cnblogs.com/laeni/p/12823166.html第一步: InitSubject 类定义
import {BehaviorSubject, Subscriber, Subscription} from ‘rxjs‘;
/**
* 第一次订阅时执行初始化操作.
*/
export class InitSubject
第二步: Service中定义可观察对象
import {Injectable} from ‘@angular/core‘;
import {InitSubject} from ‘../InitSubject‘;
import {HttpClient} from ‘@angular/common/http‘;
import {retry} from ‘rxjs/operators‘;
/**
* 获取配置系统管理的应用列表等.
*/
@Injectable({
providedIn: ‘root‘
})
export class AppService {
/**
* 用于发布信息,这里构造方法第二个参数传入自定义初始化逻辑.
*/
public app$ = new InitSubject
第三步: Service中定义可观察对象
import {Component, OnDestroy, OnInit} from ‘@angular/core‘;
import {AppService} from ‘../../service/app.service‘;
import {Subscription} from ‘rxjs‘;
@Component({
selector: ‘app-home‘,
templateUrl: ‘./home.component.html‘,
styleUrls: [‘./home.component.less‘]
})
export class HomeComponent implements OnInit, OnDestroy {
// 应用信息
app: Array;
// 应用信息变更监听
appSubscription: Subscription;
constructor(private appService: AppService) { }
ngOnInit(): void {
// 初始化时定义订阅并监听数据变化
this.appSubscription = this.appService.app$.subscribe(value => this.app = value);
}
ngOnDestroy(): void {
// 销毁时取消订阅,防止内存泄露
this.appSubscription.unsubscribe();
}
}
下一篇:PHP字符串的定义方式及区别
文章标题:Angular中利用rxjs库的Subject多播解决在第一次订阅时进行初始化操作(如第一次订阅时从服务器获取数据)
文章链接:http://soscw.com/index.php/essay/63866.html