ChangeDetectionStrategy.OnPush
(不変オブジェクト)を使用して親コンポーネントからプッシュされたInput()
(this.node
)を使用しているため、観察可能なthis.currentNodeFilters$
はngOnChanged
で定義されています。なぜこの観測可能な反応はありませんか?
この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)
}
}
そして
node: {{node | json}} from filter-content<br>
currentNodeFilters$: {{currentNodeFilters$ | async | json}}<br>
currentFilters: {{currentFilters | json}}
観測可能なものを購読しましたか? –
はい、HTMLです。メッセージを編集して追加します。 – Tom
私の本では、combineLatestは引数として2つのオブザーバブルとそのイベントを組み合わせた関数を取ります。 map()は、2つの値ではなく、イベントを受け入れる関数をとります。 –