【问题标题】:Angular child component not updating when the parent view updates父视图更新时角度子组件不更新
【发布时间】:2019-01-19 07:44:21
【问题描述】:

所以我在父视图之间共享了一些简单的同步本地数据,并且所有功能都很好,当本地数据更改时,所有使用它的父视图都会更新并正确反映。

但是,当我开始将不断增长的项目拆分为自定义组件以防止代码重复时,事情开始变得非常古怪。父组件仍然正常更新,但是尽管数据已绑定,但自定义组件子组件并未收到任何更改通知。此外,它只是父级之外的共享数据,父级本身的任何更改都会正常反映在视图上并按应有的方式更新。

因此,就目前而言,当共享数据发生变化时,部分父组件会发生变化,然后您必须单击页面以触发更改检测,这会导致大多数子组件突然获取单词并更新,但仍然存在有些不明白,所以你必须在父组件上摆弄一下才能更新所有视图,这很烦人。

我尝试了Tick()ChangeDetectorRef 中的各种方法,我尝试将它们置于不同的生命周期阶段,但我不知所措。

这是父组件上的一个子组件,它没有得到更新

<does-not-update [(ngModel)]='service.data.1'></does-not-update>

这是一个可以做到的

<input type='number' [(ngModel)]='service.data.2'/>

如上所述,点击页面通常足以让孩子们投入使用并进行更新。

有一个组件稍微复杂一些,它自己有 2 个子节点,它将 ngModel 传递给一个子节点,并让该子节点将一些不同的数据传递给它的兄弟节点。就这样

parent -> child -> grandchild
                       |
                       V
                sibling grandchild

后一种更复杂的尤其不能正常工作,点击页面会更新孩子和孙子,但不会更新兄弟孙子

我该如何理解这种混乱?

【问题讨论】:

标签: angular angular6 angular-components angular-component-life-cycle


【解决方案1】:

我遇到过类似的问题,它与 Angular 的变更检测有关。 就我而言,我有一个父组件(应用程序),其中包含两个嵌套组件,表和过滤器。当用户在其中一个过滤器字段中键入时,组件会发出“filterChange”事件。父组件可以立即看到过滤器中的更改,但表格组件在他发生某些事件(例如单击)之前无法看到这些更改。 我已经在父组件的 filterChange 处理程序中解决了这个调用 ChangeDetectorRef 的 detectChanges 的问题。

 update_filter($filter){
        this.requests_filter = $filter;
        this.cd.detectChanges();
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 2017-12-31
    • 1970-01-01
    • 2022-01-13
    • 2018-10-09
    • 1970-01-01
    • 2020-12-17
    • 2017-08-14
    相关资源
    最近更新 更多