【发布时间】: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
后一种更复杂的尤其不能正常工作,点击页面会更新孩子和孙子,但不会更新兄弟孙子
我该如何理解这种混乱?
【问题讨论】:
-
你能提供你的
does-not-update component吗?
标签: angular angular6 angular-components angular-component-life-cycle