我对Rxjs很新。如何从自定义选择框模型中设置BehaviorSubject
的第一个值,如下所示:
private mainRangeDate: any = {beginDate: {year: 2018, month: 10, day: 9},
endDate: {year: 2018, month: 10, day: 19}};
constructor(public daterangeService: DaterangeService) { }
ngOnInit() {
console.log(this.mainRangeDate);
}
onDateRangeChanged(event: IMyDateRangeModel) {
this.daterangeService.dateRangeInterval.next(event);
console.log(event.beginDate);
}
服务:
@Injectable()
export class DaterangeService {
dateRangeInterval = new BehaviorSubject<Object>({});
constructor() { }
}
组件模板:
<my-date-range-picker name="mydaterange" [options]="myDateRangePickerOptions"
[(ngModel)]="mainRangeDate" (dateRangeChanged)="onDateRangeChanged($event)" required></my-date-range-picker>
我需要将BehaviorSubject
设置为mainRangeDate
,但我不想在ngOnInit
中使用或使用超时。
答案 0 :(得分:2)
考虑到从后端异步检索值,并且服务由期望服务注入存在初始值的组件使用,应该在实例化这些组件之前检索和分配初始值。
有几种方法可以做到这一点,根据应用程序的工作方式,可以首选其中一种方法。 ngIf
提供程序允许推迟应用程序初始化。路由解析器允许推迟路由组件的初始化。 MERGE INTO [dbo].[RawMaterialStock] AS Target
USING (
VALUES (@RawMaterialId, @TotalQty)
) AS Source (NewRawMaterialId, NewQuantity)
ON target.[RawMaterialId] = source.NewRawMaterialId
WHEN MATCHED THEN
UPDATE SET Quantity = Source.NewQuantity + Quantity
WHEN NOT MATCHED BY TARGET THEN
INSERT ([RawMaterialId],Quantity) VALUES (source.NewRawMaterialID, source.NewQuantity);
指令允许推迟组件编译,直到初始值准备就绪。