所以我在父视图之间共享一些简单的同步本地数据,并且当本地数据更改所有使用它的父视图更新并正确反映时,所有函数都很好 .
然而,当我开始将我不断增长的项目拆分为自定义组件以防止代码重复时,事情开始变得非常古怪 . 父级仍然正常更新,但是自定义组件子级没有收到任何更改通知,尽管数据已绑定 . 此外,它只是父项之外的共享数据,父项本身的任何更改都会正常反映视图并按原样更新 .
现在看来,当共享数据发生变化时,父母的某些部分会发生变化,然后您必须单击该页面才能触发更改检测,这会导致大多数子组件突然得到这个词并进行更新但是得到这个词,所以你必须在父组件上稍微摆弄一下,以便更新所有更新的视图,这很烦人 .
我已经尝试了 Tick()
和各种方法 ChangeDetectorRef
和我've tried placing these in various lifecycle phases but I'米不知所措 .
这是父级上没有获得更新的子组件
<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
后者更复杂一个特别是不能正常工作,点击页面更新孩子和大孩子而不是兄弟姐妹大孩子
我怎么理解这个烂摊子?
1 回答
我've faced a similar problem, it'与 Angular's change detection 有关 . 在我的例子中,我有一个父组件(app),它有两个嵌套组件,表和过滤器 . 当用户键入其中一个过滤器字段时,该组件会弹出"filterChange"事件 . 父组件可以看到过滤器中的更改,但是表组件无法在父组件中的filterChange处理程序内解决此调用changeDetectorRef的detectChanges .