zoukankan      html  css  js  c++  java
  • [Angular 2] Using Two Reducers Together

    Add another reducer:

    export const SECOND = "SECOND";
    export const HOUR = "HOUR";
    
    export const clock = (state = new Date(), {type, payload} = {type: ""})=> {
        const date = new Date(state.getTime());
        switch(type){
            case SECOND:
                date.setSeconds(date.getSeconds() + payload);
                return date;
    
            case HOUR:
                date.setHours(date.getHours() + payload);
                return date;
            default:
                return state;
        }
    
        return state;
    };
    
    const defaultPeople = [
        {name: "Sara", time: clock()},
        {name: "Wan", time: clock()},
        {name: "Zhen", time: clock()},
        {name: "Tian", time: clock()}
    ];
    export const people = (state = defaultPeople, {type, payload}) => {
        switch(type){
    
            default:
                return state;
        }
    };

    Added a 'people' reducer, defined a 'defaultPeople' as default state.

    // main.ts
    
    bootstrap(App, [
        provideStore({clock, people})
    ])

    In bootstrap, add people reducer to the provideStore().

    Then finally inside app.ts, use log out people information:

    /**
     * Created by wanzhen on 26.4.2016.
     */
    import {Component} from 'angular2/core';
    import {Observable} from 'rxjs/Observable';
    import 'rxjs/add/observable/interval';
    import 'rxjs/add/operator/map';
    import 'rxjs/add/observable/merge';
    import 'rxjs/add/operator/startWith';
    import 'rxjs/add/operator/scan';
    import 'rxjs/add/operator/mapTo';
    import {Subject} from "rxjs/Subject";
    import {Store} from '@ngrx/store';
    import {SECOND, HOUR} from './reducers';
    import {ClockComponent} from './clock';
    
    @Component({
        selector: 'app',
        directives: [ClockComponent],
        template: `
            <input #inputNum type="number" value="0">
            <button (click)="click$.next(inputNum.value)">Update</button>
            <clock [time]="time |async"></clock> 
            <ul>
                <li *ngFor="#person of people | async">
                    {{person.name}} is in {{person.time | date : 'jms'}} 
                </li>
            </ul>
            `
    })
    export class App {
        click$ = new Subject()
                .map( (number) => ({type: HOUR, payload: parseInt(number)}));
    
        seconds$ = Observable.interval(1000)
            .mapTo({type: SECOND, payload: 1});
    
        time;
        people;
    
        constructor(store:Store) {
            this.time = store.select('clock');
            this.people = store.select('people');
    
    
            Observable.merge(
                this.click$,
                this.seconds$
                )
                .subscribe(store.dispatch.bind(store))
        }
    }
  • 相关阅读:
    结对项目刘畅2016012040
    Daily target小队介绍(刘畅,陈杰,杨有存,唐祎琳,王晓哲,邵汝佳)
    第四、十七章读书报告
    2016012040+小学四则运算练习软件项目报告
    JAVA之路(二)
    使用pip命令可能遇到的报错
    monkey命令
    Mitmproxy 手机配置代理
    appium安装与简单使用
    自动化测试第十一节---unittest
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5440387.html
Copyright © 2011-2022 走看看