猿问

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);

    });

  }

}


慕虎7371278
浏览 65回答 1
1回答

万千封印

改用怎么样OnChanges?检查您的更改状态/值@Input() filtersimport { OnChanges, SimpleChanges } from '@angular/core';@Component({...})export class ChildComponent implements OnInit, OnChanges {&nbsp; &nbsp;...&nbsp; &nbsp;@Input() filters: MessageFilter;&nbsp; &nbsp;ngOnChanges({ filters }: SimpleChanges) {&nbsp; &nbsp; &nbsp; &nbsp;console.log(filters);&nbsp; &nbsp; &nbsp;// if you want to check any states/activities&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (filters && filters.currentValue && filters.currentValue.kind)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.form.patchValue({ kind: this.filters.kind });&nbsp; &nbsp;&nbsp; &nbsp;}&nbsp; &nbsp;ngOnInit() {&nbsp; &nbsp; &nbsp; &nbsp;this.form.valueChanges.pipe(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; untilDestroyed(this),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; distinctUntilChanged(),&nbsp; &nbsp; &nbsp; &nbsp;).subscribe(values => this.updateFilters.emit(values.kind));&nbsp; &nbsp;}}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答