Angular2 앱에서 상태 관리를 제공하기 위해 ngrx를 사용하고 있습니다. 나는 두 가지 구성 요소를 가지고 MenuComponent
와 ResultsPanelComponent
그 국가의 동일한 슬라이스에 의해 제공되는 다른 값에 가입.
내가보고있는 문제는 "메뉴"구성 요소가 상태 변경에 응답하지만 상태 값을 기록 할 때 "결과"구성 요소가 응답하지 않는다는 것입니다.
상위 구성 요소에 상태를 채우는 작업을 발송하고 있습니다.
menu.component.ts
export class MenuComponent implements OnInit, OnDestroy {
private sub: Subscription;
newReportHeaderCount: number;
constructor(private store: Store<AppState>) {}
ngOnInit(): void {
this.sub = this.store.select('results').subscribe((state) => {
console.log('MenuComponent state: ', state);
this.newReportHeaderCount = state['newReportHeaderCount'];
});
}
ngOnDestroy(): void {
this.sub.unsubscribe();
}
}
results.component.ts
export class ResultsPanelComponent implements OnInit, OnDestroy {
private sub: Subscription;
reportHeaderSummary: ReportHeaderSummary[] = [];
constructor(private store: Store<AppState>) {}
ngOnInit(): void {
this.sub = this.store.select('results').subscribe((state) => {
console.log('ResultsPanelComponent state: ', state);
this.reportHeaderSummary = state['reportHeaderSummary'];
});
}
ngOnDestroy(): void {
this.sub.unsubscribe();
}
}
내 앱을 실행하면 다음이 표시됩니다.
MenuComponent state: Object {reportHeaderSummary: Array[0], reportHeaders: Array[0], newReportHeaderCount: 0, loading: false}
ResultsPanelComponent state: Object {reportHeaderSummary: Array[0], reportHeaders: Array[0], newReportHeaderCount: 0, loading: false}
MenuComponent state: Object {reportHeaderSummary: Array[4], reportHeaders: Array[0], newReportHeaderCount: 3, loading: false}
콘솔에 기록되었습니다. ResultsPanelComponent state
상태가 변경되었을 때에 대한 로그 문이 하나 더 표시 될 것으로 예상합니다 .
은 ResultsPanelComponent
상이한 모듈로되어 MenuComponent
있지만, 모두가 데이터를로드 할 작업을 전달 동일한 상위 모듈에 포함된다.
[최신 정보]
newReportHeaderCount
값 을 증가시키기 위해 추가 작업을 수행했으며 MenuComponent
또는 에서 디스패치 ResultsPanelComponent
되면 상태가 정확하지만 새 값이 results
상태 슬라이스 를 구독하는 모든 구성 요소에 푸시되지는 않습니다 .
액션을 전달한 구성 요소의 새 상태 값만 볼 수 있습니다.
액션 디스패치를 상위 구성 요소로 이동하면 상태 변경 만 볼 수 있습니다. MenuComponent
내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
다른 여러 모듈에서 공유되는 모듈에서 EffectListener 및 provideStore를로드했습니다.
나는 그것들을 내 뿌리로 옮겼고 AppModule
모든 것이 예상대로 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다