在Part 1提到在aciton裡面,如果有需要呼叫api的行為,都會發生這個階段
目前有發現有兩種方式可以處理api.
- angular的service(http call)
- fetch api
如果利用第二種方式處理api call時,可以直接寫在action裡面。但是如果想要利用angular的service方式時,就要繞一下路了
但是,還是先簡單的寫一下fetch的方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| export function loadTodo() { return dispatch => { return fetch('api/Values') .then((response) => { return response.json() }) .then((data) => { return ({ type: TODO_INIT, payload: data }); }) .then((action) => { dispatch(action); }) } }
|
利用service的code如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import {Injectable, Inject } from 'angular2/core';
import {Http, Response} from 'angular2/http'; import 'rxjs/Rx'; import {TODO_INIT} from '../constants';
@Injectable() export class TodoService { constructor( @Inject('ngRedux') private store, private http: Http) {
}
loadTodo() { return this.http.get('api/Values') .map((res) => { return res.json() }) .map((d) => ({ type: TODO_INIT, payload: d })) .subscribe((action) => { this.store.dispatch(action); }) } }
|