RxJS observables 有一个方法distinctUntilChanged() http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-distinctUntilChanged返回一个新的可观察量,仅当与之前发出的值不同时才发出新值:
this._LogsService.QueryParameters
.distinctUntilChanged()
.subscribe((_QueryParams) => this.QueryParams = _QueryParams);
这适用于简单的比较。如果您需要_.isEqual
尽管如此,您可以将回调传递给distinctUntilChanged()
执行比较:
this._LogsService.QueryParameters
.distinctUntilChanged((prev, curr) => _.isEqual(prev, curr))
.subscribe((_QueryParams) => this.QueryParams = _QueryParams);
请注意,您不会返回! ...
在回调内部,每当返回值是false
(表示被测值不等于), 价值passes.
Update
从您最新的编辑来看,您实际上传递的是完全相同的对象,只是改变了其内容,正如 @Brandon 在下面的评论中建议的那样。您可以尝试在更新时创建一个新对象,通过Object.assign()
:
updateStartDate() {
this.QueryParams.filterStartDate = _.isUndefined(this.FilterStartDate)
? NaN
: new Date(this.FilterStartDate.nativeElement.value).getTime();
this._LogsService.updateQueryParams(Object.assign({}, this.QueryParams));
}
对象实际上是通过引用传递的。
注意new Date()
还返回一个对象。该对象也通过引用传递和分配,只是这一次Object.assign
不会帮助你,因为日期对象取决于原型链接(它不是plain目的)。