这可能是一个棘手的问题,我希望提供足够的信息来解决这个问题,因为我已经尝试了几个小时。
我很确定我已经以某种方式实例化了两个服务,因为从一个组件启动的更改不会影响另一个组件。
以下是模块结构。
canvas
CalendarService有一个初始化方法,用于传递初始数据。
SharedModule //reuseable cmps and so on..
AppModule({
imports:[SharedModule, PageModule]
})
PageModule({
imports:[SharedModule,CalendarModule]
})
CalendarModule({
imports:[SharedModule],
declarations:[CaldendarMonthCmp, CalendarCmp, CalendarDayCmp]
providers:[CalendarService]
})
CaldendarMonthCmp在月份网格中显示日历,当我点击任何一天时,它会初始化并传递newDays数组并在新页面中打开CalendarDayCmp。
CalendarDayCmp订阅了calendarDays $,但只获得一个空数组,而不是newDays。
当我改为代码
时,我怀疑两个服务实例已经变硬了calendarDays$: BehaviorSubject<sbCal.SbCalendarDay[]> = new BehaviorSubject([]);
intializeDays(day: sbCal.SbCalendarDay) {
let newDays = [...data] // do some calculations, array not empty
this.calendarDays$.next(newDays);
}
仅在调用initialize时实例化主题。在这种情况下,打开CalendarDayCmp会抛出并且无法订阅未定义的错误。
我已经阅读了角度ngModule描述,据我了解,只有在我将服务提供给其他模块时才会实例化更多服务?
感谢您的帮助!