Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
Tags
- jvm 메모리 구조
- jpa pagination
- HHH000104
- springboot jwt
- spring jwt
- springboot maven plugin
- JPA
- docker mongodb install
- filter ordering
- springboot mongodb config
- JWT
- jvm memory model
- springboot jwt example
- docker mongodb
- angular jwt
- Constants pool
- spring filter ordering
- jvm memory structure
- springboot-angular-jwt
- intern
- jwt token
- install mongodb docker
- String Constants Pool
- spring-boot-maven-plugin
- 기본 Manifest 속성이 없습니다
- jvm 모델
- jwt example
- mongodb install ec2
- string comparison
- String Pool
Archives
- Today
- Total
개발블로그
Angular ngrx 사용 방법 본문
1. npm install
npm install @ngrx/store-devtools —save
npm install @ngrx/store —save
npm install @ngrx/effects —save
버전 문제가 있어 6버전으로 다시 설치함.
버전을 지정하고 싶으면
npm install @ngrx/store@6
2. app.modules.ts에 ngrx import문 추가
import {EffectsModule} from '@ngrx/effects';
import {StoreModule} from '@ngrx/store';
import {StoreDevtoolsModule} from '@ngrx/store-devtools';
3. Store 구조 생성
4. store 정보를 app.modules.ts에 정의해야함.
@NgModule({
imports:[
...생략
StoreModule.forRoot(reducers),
EffectsModule.forRoot([TopicEffects]),
StoreDevtoolsModule.instrument({
maxAge: 25
})
],
declarations: [
...생략
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
reducer 정보는 StoreModule을 임포트 할 때, effect정보는 EffectModule을 임포트 할 때 정의한다.
이 때, reducer가 여러개면 배열로 정의해야 한다.
StoreModule.forRoot([reducer1, reducer2])
따라서 reducer를 따로 관리하도록 함.
5. app.states.ts에서 리듀서를 관리하기 위한 상수 선언
export const reducers = {
categoryTopic : topic.reducer
}
6. Action 생성
Reducer를 통해 Store에 저장할 값을 변경시키거나 Effect를 호출하기 위한 진입점을 정의하기 위함.
import {Action} from '@ngrx/store'
export enum TopicActionTypes{
LOAD = '[TOPIC] All CategoryTopic Load',
CATEGORY_TAB_CLICK = '[TOPIC] Category Tab Click',
CATEGORY_TOPICS_GETTER = '[TOPIC] Get CategoryTopics'
}
export class Load implements Action{
readonly type = TopicActionTypes.LOAD
constructor(public payload: any){}
}
export class CategoryTopicsGetter implements Action{
readonly type = TopicActionTypes.CATEGORY_TOPICS_GETTER
}
export type ALL =
| Load
| CategoryTopicsGetter
이 진입점을 호출하기 위해서는 다음과 같은 코드 실행
this.store.dispatch(new CategoryTopicsGetter());
7. Effect, Reducer 정의
@Injectable()
export class TopicEffects{
constructor(
private actions: Actions
,private topicService: TopicService
){}
@Effect()
GetCategoryTopics: Observable<Action> = this.actions.pipe(
ofType(TopicActionTypes.CATEGORY_TOPICS_GETTER),
map((action: Load) => action.payload),
switchMap(payload => {
return this.topicService.getCategoryTopics().pipe(
map((categoryTopicList) => {
return new Load(categoryTopicList);
}));
}));
}
import { ALL, TopicActionTypes } from "../actions/topic.actions";
export function reducer([], action: ALL): any {
switch (action.type) {
case TopicActionTypes.LOAD: {
return action.payload;
}
default: {
return [];
}
}
}
8. 스토어에 저장된 내용을 보기 위해선 다음과 같이 사용한다.
this.store.select('categoryTopic').subscribe(categories=>{
if(that.categories.length==0){
that.categories = categories;
}
})
Comments