• [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>
  • 相关阅读:
    2019年江苏大学885编程大题
    2018年江苏大学885编程题
    python-类和对象
    unity游戏框架学习-登录模块
    unity游戏框架学习-AssetBundle
    记 Firebase Crashlytics 接入遇到的坑
    c# 枚举Enum
    unity性能优化-UGUI
    unity性能优化-GPU
    unity性能优化-CPU
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6948837.html
Copyright © 2020-2023  润新知