【发布时间】:2017-09-13 17:20:46
【问题描述】:
我一直在开发一个允许几个不同组件在 Angular 中更新 BehaviorSubject 的应用程序。在每个组件中,我存储了前一个 BehaviorSubject 值的本地副本。为了知道组件是否生成了被推出的新值,我打算只使用 LoDash 的 _.isEqual() 函数比较两个对象。但是,我发现在进行比较之前,我的 Observable 本地副本已经更新。
Angular 是否会查找 = 语句并在 Observable next 函数之外创建到该组件属性的外部绑定?
鉴于下面的代码,我发现组件中的 this.QueryParams 属性已更新为函数中正在处理的当前值,即使我没有将新值分配给该属性,也会导致比较失败直到 if 语句被评估。
组件
export class LogsModalComponent implements OnInit {
private QueryParams: LogsQueryParameters
ngOnInit() {
this._LogsService.QueryParameters$.subscribe(_QueryParams => {
console.log(this.QueryParams);
console.log(_QueryParams);
if (!_.isEqual(this.QueryParams, _QueryParams) {
this.QueryParams = _QueryParams;
// Some code to process if the new value was different.
}
}
}
updateStartDate() {
this.QueryParams.filterStartDate = _.isUndefined(this.FilterStartDate) ? NaN : new Date(this.FilterStartDate.nativeElement.value).getTime();
this._LogsService.updateQueryParams(this.QueryParams);
}
}
服务
LogsQueryParameters: BehaviorSubject<LogsQueryParameters> = new BehaviorSubject<LogsQueryParameters>({
limit: 25,
logLevels: "",
logTypes: "",
logUserIDs: "",
filterStartDate: NaN,
filterEndDate: NaN
})
LogsQueryParameters$ = this.LogsQueryParameters.asObservable();
updateQueryParams(QueryParams) {
this.LogsQueryParameters.next(QueryParams);
}
【问题讨论】:
标签: angular typescript rxjs lodash observable