Bug子组件输入到补丁反应表单不会在Oninit上更新



我在ngrx实体存储中得到了数据,它根据寻呼机以块的形式显示,我的问题是rxjs,它是如何记住分页的——例如,我从服务器上获得第一页数据,它工作,然后如果我获得下一页,它现在加载得很好——如果我回到第一页,数据会被switchMap截断,如果我再次前进一页,当存储中有数据时,switchMap会给我一个空数组。。。在这之后我完全被rxjs弄糊涂了。。。

这是我在创建新数组时展示的代码——一切都正常——我只是不明白这种奇怪的效果——为什么会导致不可变的数据?也是我使用ngrx为Oninit上的子组件中的输入加载一个保存状态。我用保存状态修补表单,然后在表单上设置一个侦听器,这样每次输入更改时我都会保存它。开发中的问题是它工作得很好,但在生产中它无法修补输入。我猜在Oninit运行后加载数据需要更长的时间。

处理这种情况的最佳方法是什么,尝试了不同的方法,有些方法会在视图渲染前修改错误原因数据,另一种方法会让我陷入无尽的循环。这是子代码

export class ChildComponent implements OnInit {
@Output() updateFilters = new EventEmitter<string>(false);
@Input() filters: MessageFilter;
form: FormGroup;
constructor(fb: FormBuilder) {
this.form = fb.group({ kind: [] });
}
ngOnInit() {
if (this.filters.kind) {
this.form.patchValue({kind: this.filters.kind});
}
this.form.valueChanges.pipe(
untilDestroyed(this),
distinctUntilChanged(),
).subscribe(values => {
this.updateFilters.emit(values.kind);
});
}
}

改为使用OnChanges怎么样?检查@Input() filters的更改状态/值

import { OnChanges, SimpleChanges } from '@angular/core';

@Component({...})
export class ChildComponent implements OnInit, OnChanges {
...
@Input() filters: MessageFilter;
ngOnChanges({ filters }: SimpleChanges) {
console.log(filters);     // if you want to check any states/activities

if (filters && filters.currentValue && filters.currentValue.kind)
this.form.patchValue({ kind: this.filters.kind });   
}
ngOnInit() {
this.form.valueChanges.pipe(
untilDestroyed(this),
distinctUntilChanged(),
).subscribe(values => this.updateFilters.emit(values.kind));
}
}

最新更新