0.3.19 • Published 7 years ago
@ng-vcl/store v0.3.19
Store
Installation
npm install @ng-vcl/store --save
Usage
import { NgModule } from '@angular/core';
import { StoreModule } from 'ng-vcl';
import { AppComponent } from './app.component';
import { REDUCERS } from './reducers';
import { EFFECTS } from './effects';
@NgModule({
imports: [
StoreModule.forRoot({
enableRouter: true, // enables the StoreRouter
reducers: [ ... ], // optional - Your reducers
effects: [ ... ] // optional - Effect classes
})
],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Reducers
export const initialState: BooksState = {
loading: false,
books: [],
error: null
};
export class SearchBooksAction {
constructor(public query: string) {}
}
export class SearchBooksCompleteAction {
constructor(public books: any[]) {}
}
export class SearchBooksErrorAction {
constructor(public error: any) {}
}
function bookReducer(state = initialState, action: SearchBooksAction | SearchBooksCompleteAction | SearchBooksErrorAction) {
if (action instanceof SearchBooksAction) {
return {
loading: true,
books: [],
error: null
};
} else if (action instanceof SearchBooksCompleteAction) {
return {
loading: false,
books: [...action.books],
error: null
};
} else if (action instanceof SearchBooksErrorAction) {
return {
loading: false,
books: [],
error: action.error
};
}
return state;
}
export const BOOK_REDUCERS = {
books: bookReducer
}
Store
@Injectable()
export class BooksService {
constructor(
private store: Store,
) { }
books$ = this.store.select<BooksState>(state => state.books);
public search(query: string) {
this.store.dispatch(new SearchBooksAction(query));
}
}
Effects
@Injectable()
export class BooksEffects {
constructor(
private actions$: StoreActions,
private http: Http
) { }
@Effect()
search = this.actions$
.ofType(SearchBooksAction)
.switchMap( ({query}) => {
return this.http.get(`${API}?q=${query || ''}`)
.map(res => res.json())
.map(result => result.items)
.map(items => {
return new SearchBooksCompleteAction(items);
})
.catch(err => {
return Observable.of(new SearchBooksErrorAction(err));
});
});
}
0.4.0-1
7 years ago
0.4.0-0
7 years ago
0.3.19
7 years ago
0.3.18
7 years ago
0.3.17
7 years ago
0.3.16
7 years ago
0.3.14
7 years ago
0.3.13
7 years ago
0.3.12
7 years ago
0.3.11
7 years ago
0.3.10
7 years ago
0.3.9
7 years ago
0.3.8
7 years ago
0.3.7
7 years ago
0.3.6
7 years ago
0.3.5
7 years ago
0.3.4
7 years ago
0.3.3
7 years ago
0.3.3-9
7 years ago
0.3.3-8
7 years ago
0.3.3-7
7 years ago
0.3.3-6
7 years ago
0.3.3-5
7 years ago
0.3.3-4
7 years ago
0.3.3-3
8 years ago
0.3.3-2
8 years ago
0.2.14
8 years ago
0.2.13
8 years ago
0.2.12
8 years ago
0.3.1-1
8 years ago
0.3.1-0
8 years ago
0.2.11
8 years ago
0.2.10
8 years ago
0.2.9
8 years ago
0.2.8
8 years ago
0.2.7
8 years ago
0.2.5
8 years ago
0.2.2
8 years ago
0.2.1
8 years ago
0.2.0
8 years ago
0.1.2
8 years ago
0.1.1
8 years ago
0.1.0
8 years ago
0.0.10
8 years ago