首页 文章

父视图更新时,Angular子组件不会更新

提问于
浏览
1

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

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

现在看来,当共享数据发生变化时,父母的某些部分会发生变化,然后您必须单击该页面才能触发更改检测,这会导致大多数子组件突然得到这个词并进行更新但是得到这个词,所以你必须在父组件上稍微摆弄一下,以便更新所有更新的视图,这很烦人 .

我已经尝试了 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 回答

  • 0

    我've faced a similar problem, it'与 Angular's change detection 有关 . 在我的例子中,我有一个父组件(app),它有两个嵌套组件,表和过滤器 . 当用户键入其中一个过滤器字段时,该组件会弹出"filterChange"事件 . 父组件可以看到过滤器中的更改,但是表组件无法在父组件中的filterChange处理程序内解决此调用changeDetectorRef的detectChanges .

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

相关问题