首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExpressionChangedAfterItHasBeenCheckedError与ViewChildren

ExpressionChangedAfterItHasBeenCheckedError与ViewChildren
EN

Stack Overflow用户
提问于 2019-06-19 00:03:21
回答 1查看 442关注 0票数 0

我“修正”了这个错误,但我想确保我没有做我不该做的事情,因为这只是感觉不对,…

下面是我设计的示例,我有两个组件faqComponentquestionAnswerComponent

代码语言:javascript
复制
<app-faq>
  <ul>
    <li *ngFor="let questionsAnswer of questionsAnswers">
      {{ questionsAnswer.question }}
    </li>
  </ul>
  <app-question-answer
     question="1. Why Foo Bar when Baz?"
     slug="why-foo-bar-when-baz"
     [activeSlug]="currentSlug"
  >
    <p>
     Lorem ipsum dolor sit amet
    </p>
  </app-question-answer>
    ... // a lot more question answer components
</app-faq>

我希望由父组件上的questionsAnswer组件动态生成列表,通过使用视图子组件,这是我想要的方式。

代码语言:javascript
复制
@ViewChildren(QuestionAnswerComponent) questionsAnswers: QueryList<QuestionAnswerComponent>;

除了在日志中得到一个ExpressionChangedAfterItHasBeenCheckedError之外(但它仍然为我呈现列表)

为了解决这个问题,我发现如果我将faq组件更改检测策略设置为OnPush,然后在ngAfterContentChecked中触发一个markForCheck(),它就会消除该错误。

所以我的问题是为什么这很糟糕?或者还有其他方法可以迭代viewChildren呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 01:24:50

这是在v8中解决的问题,在ViewChildren和ViewContent上有一个显式的static标志。因此,如果您是ng update @angular/core,更新示意图将将static: false添加到您的questionAnswers中,因为它将检测到它们是动态的,并且它们将在ngAfterViewInit之后可用。

另一方面,我不太确定这个更改是否改进了更改检测并删除了异常,您可以升级并告诉我们:D,但是您的方法似乎是正确的,因为这是我们必须避免v7中的错误的方法,希望它不会发生在v8中。

祝你编码愉快!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56658477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档