[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: , name: 'Learning Angular'},
      {id: , name: 'Learning Redux'}
    ]);
  }
}
<div>
<ul *ngFor="let todo of todos$ | async">
<li>{{todo.name}}</li>
</ul>
</div>
[Angular] Creating an Observable Store with Rx的更多相关文章
- [Angular 2] Using ngrx/store and Reducers for Angular 2 Application State
		ngrx/store is a library that simplifies common RxJS patterns for managing state and gives you an eas ... 
- [Angular] How to get Store state in ngrx Effect
		For example, what you want to do is navgiate from current item to next or previous item. In your com ... 
- [rxjs] Creating An Observable with RxJS
		Create an observable var Observable = Rx.Observable; var source = Observable.create(function(observe ... 
- Angular基础(八) Observable & RxJS
		对于一个应用来说,获取数据的方法可以有很多,比如:Ajax, Websockets, LocalStorage, Indexdb, Service Workers,但是如何整合多种数据源.如何避免BU ... 
- angular Creating a Directive that Adds Event Listeners
		<span my-draggable>Drag ME</span> angular.module('dragModule', []) .directive('myDraggab ... 
- Angular 2.0 从0到1 (七)
		第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节: ... 
- Angular 2.0 从0到1 (六)
		第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节: ... 
- Angular 2.0 从0到1 (四)
		第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节: ... 
- Angular - 预加载 Angular 模块
		Angular - 预加载延迟模块 在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块.但这需要一点时间.在用户第一次点击的时候,会有一点延 ... 
随机推荐
- 记录一个mybatis编写xml遇到的错误:java.lang.unsupportedOperationException
			写完xml里的sql在执行xml中的sql时报错,经过排查找到问题出在方法中的resultType这个属性的类型上 如图所示:只需要将sortedSet改为set集合里所存储的对象的类型即可. 这里我 ... 
- java高质量缩放图片
			可按照比例缩放,也可以指定宽高 import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg.JP ... 
- 洛谷 P1405 苦恼的小明
			P1405 苦恼的小明 题目描述 黄小明和他的合伙人想要创办一所英语培训机构,注册的时候要填一张个人情况的表格,在身高一栏小明犯了愁. 身高要求精确到厘米,但小明实在太高了,无法在纸上填下这么长的数字 ... 
- 解决 Visual Studio 2013、2015、2017 工具箱不显示ArcGIS 10.2 控件,及ArcGIS模板丢失问题
			1.重装ArcObject SDK for .NET Framework方法 (1)问题描述: 环境:WIN10 64bit.Visual Studio 2013.ArcGIS10.1.ArcGIS ... 
- 终结者:借助pinyin4j相关jar包提取汉字的首字母
			import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCase ... 
- 使WordPress改域名后网站正常运行的方法
			使WordPress改域名后网站正常运行的方法 wp-content/wp-config.php $path = '/blog'; $scheme = (isset($_SERVER['HTTPS'] ... 
- softInputMode- 软件盘的设置
			今天遇到一个问题,就是软件盘弹出来以后,会把之前的布局界面整个的挤到屏幕的外面,而且按下返回建以后,这个软件盘占据的空间会留下一个黑色的背景.在网上查找了很多的方法,刚开始都是说,如下方法 <a ... 
- ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
			原文 http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要: 目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲, ... 
- StartCoroutine的使用
			StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,可是在unity中有些元素是不能操作的.这个时候能够使用协程来完毕. 使 ... 
- PHPki
			PHPki PHPki是一个基于开放源码Web的应用程序,用来管理遵守HIPAA的多代理"公钥基础结构".它可以用于创建X.509数字证书,并主要为支持S/MIME的电子邮件客户端 ... 
