[Angular] Creating an Observable Store with Rx
The API for the store is really simple:
/* set(name: string, state: any); select<T>(name: string): Observable<T> */
There are two methods, set() & select().
Store:
import {Observable} from 'rxjs/Observable'; import {BehaviorSubject} from 'rxjs/BehaviorSubject'; import {IState} from './state'; import 'rxjs/add/operator/pluck'; import 'rxjs/add/operator/distinctUntilChanged'; const state: IState = { playList: undefined }; export class Store { /*Because store usually has a default value, BehaviorSubject is suitable for that*/ private subject = new BehaviorSubject<IState>(state); /*Create a observable store*/ private store = this.subject .asObservable() // convert to an observable .distinctUntilChanged(); // performance improve /*Get value from subject*/ get value() { return this.subject.value; } set(name: string, state: any) { const nextState = { ...this.value, [name]: state }; this.subject.next(nextState); } select<T>(name: string): Observable<T> { // get prop value from observable return this.store.pluck(name); } }
interface:
export interface IState { playList: any[] }
Component:
import { Component } from '@angular/core'; import {Store} from './store'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { todos$ = this.store.select<any[]>('todos'); constructor(private store: Store) { this.store.set('todos', [ {id: 1, name: 'Learning Angular'}, {id: 2, name: 'Learning Redux'} ]); } }
<div> <ul *ngFor="let todo of todos$ | async"> <li>{{todo.name}}</li> </ul> </div>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-06-06 [Redux] Colocating Selectors with Reducers
2016-06-06 [Redux] Using mapDispatchToProps() Shorthand Notation
2016-06-06 [Redux] Using withRouter() to Inject the Params into Connected Components
2016-06-06 [Redux] Filtering Redux State with React Router Params