Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular ';检查后更改';投影组件在祖先中设置值时出错_Angular - Fatal编程技术网

Angular ';检查后更改';投影组件在祖先中设置值时出错

Angular ';检查后更改';投影组件在祖先中设置值时出错,angular,Angular,当投影组件在祖先组件中设置值时,我得到了一个“检查后更改”错误。这是我这期的复制品: 我第一次遇到这个问题是在马特·布罗菲的一篇文章中。这是一个美丽的模式,但我认为他可能忽略了这个问题,或者在Angular的早期版本中这不是一个问题。我最初的问题是。我没有在解决方案上得到成功的帮助,因为我没有一个简化的、实时的复制 如何设置此项而不出现错误?问题在于,您正在同一个更改检测周期中更改来自父项的数据。只需将更改包装在setTimeout()调用中,以确保在更改检测周期完成后运行,即可防止抛出该错误

当投影组件在祖先组件中设置值时,我得到了一个“检查后更改”错误。这是我这期的复制品:

我第一次遇到这个问题是在马特·布罗菲的一篇文章中。这是一个美丽的模式,但我认为他可能忽略了这个问题,或者在Angular的早期版本中这不是一个问题。我最初的问题是。我没有在解决方案上得到成功的帮助,因为我没有一个简化的、实时的复制


如何设置此项而不出现错误?

问题在于,您正在同一个更改检测周期中更改来自父项的数据。只需将更改包装在
setTimeout()
调用中,以确保在更改检测周期完成后运行,即可防止抛出该错误

ngOnInit() {
    console.log(this.rootComponent);
    setTimeout(() => this.rootComponent.change++);
}
您通常不会遇到这些问题,因为触发数据更改的通常是某个用户事件,而不是在更改检测生命周期中运行的某些方法(至少不会更改父数据)


也就是说,修改另一个组件拥有的数据通常不是最好的。正如@Harry Ninh所提到的,最好广播一个事件,通知父级数据需要更新(在这种情况下,您仍然需要使用
setTimeout()
包装,因为您仍将广播该事件以在相同的更改检测周期内更改父级中的数据).

问题在于,您正在同一个更改检测周期中更改来自父级的数据。只需将更改包装在
setTimeout()
调用中,以确保在更改检测周期完成后运行,即可防止抛出该错误

ngOnInit() {
    console.log(this.rootComponent);
    setTimeout(() => this.rootComponent.change++);
}
您通常不会遇到这些问题,因为触发数据更改的通常是某个用户事件,而不是在更改检测生命周期中运行的某些方法(至少不会更改父数据)


也就是说,修改另一个组件拥有的数据通常不是最好的。正如@Harry Ninh所提到的,最好广播一个事件,通知父级数据需要更新(在这种情况下,您仍然需要使用
setTimeout()
包装,因为您仍将广播该事件以在相同的更改检测周期内更改父级中的数据).

在子组件中使用输出并在根中捕获如何?不起作用:在子组件中使用输出并在根中捕获如何?不起作用:哦,天哪。我很确定我在某个时候尝试过设置超时。它当然在普朗克有效…哦,天哪。我很确定我在某个时候尝试过设置超时。它当然在普朗克有效。。。
ngOnInit() {
    console.log(this.rootComponent);
    setTimeout(() => this.rootComponent.change++);
}