Наблюдаемый this.currentNodeFilters$
определяется в ngOnChanged
, поскольку он использует Input()
(this.node
), вытолкнутый из родительского компонента, с использованием ChangeDetectionStrategy.OnPush
(неизменяемый объект).Почему это наблюдаемое не реагирует?
Этот this.currentNodeFilters$
используется с текущим queryParams
в combineLatest
. Я ожидаю, что при любых изменениях от this.currentNodeFilters$
или queryParams
наблюдаемый this.currentFilters$
отреагирует. Но ничего не происходит.
Вопрос: Почему это не реагирует на изменения?
Вот мой код:
import {Component, OnInit, ChangeDetectionStrategy, Input} from '@angular/core';
import {ActivatedRoute} from "@angular/router";
import {Observable} from "rxjs";
@Component({
selector: 'filter-content',
templateUrl: './filter-content.component.html',
styleUrls: ['./filter-content.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class FilterContentComponent implements OnInit {
public currentNodeFilters$: Observable<any>;
public currentFilters:any;
@Input() node;
constructor(private route: ActivatedRoute) { }
ngOnChanges() {
this.currentNodeFilters$ = Observable.of({
"params": {
"nodes": this.node.id
},
"order": "asc"
}
)
}
ngOnInit() {
const queryParams$ = this.route.queryParams;
// On regarde les queryParams pour construire currentFilters
Observable.combineLatest(this.currentNodeFilters$, queryParams$, (currentFilter, queryParams) => {
const p = Object.keys(queryParams).map(key => {
const params = {};
params[key] = queryParams[key];
return Object.assign({}, {"params": params})
})
return Object.assign({}, currentFilter, p);
})
.subscribe(currentFilters => this.currentFilters = currentFilters)
}
}
И файл HML подписавшись
node: {{node | json}} from filter-content<br>
currentNodeFilters$: {{currentNodeFilters$ | async | json}}<br>
currentFilters: {{currentFilters | json}}
Вы подписались на наблюдаемый? –
Да в html. Я собираюсь изменить сообщение, чтобы добавить его. – Tom
В моей книге combLatest принимает два наблюдаемых в качестве аргумента и функцию, которая объединяет их события. map() принимает функцию, принимающую событие, а не два значения. –