在Angular中设置BehaviorSubject的第一个值

时间:2017-11-29 14:45:08

标签: angular typescript rxjs

我对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中使用或使用超时。

1 个答案:

答案 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); 指令允许推迟组件编译,直到初始值准备就绪。