- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在父组件中 =>
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: ''. Current value: '[object Object]'.
at viewDebugError (vendor.bundle.js:8962)
at expressionChangedAfterItHasBeenCheckedError (vendor.bundle.js:8940)
父组件 Html
<div>
<app-child-widget [allItems]="allItems" (notify)="eventCalled($event)"></app-child-widget>
<div>
父组件
export class ParentComponent implements OnInit {
returnedItems: Array<any> = [];
allItems: Array<any> = [];
constructor(
) { }
ngOnInit() {
this.allItems = // load from server...
}
eventCalled(items: Array<any>): void {
this.returnedItems = items;
}
}
子组件
@Component({
selector: 'app-child-widget',
templateUrl: 'child.component.html',
styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit {
@Output() notify: EventEmitter<any> = new EventEmitter();
@Input() private allItems: Array<any>;
constructor() { }
ngOnInit() {
doSomething();
}
doSomething() {
this.notify.emit(allItems);
}
}
最佳答案
文章 Everything you need to know about the ExpressionChangedAfterItHasBeenCheckedError
error 非常详细地解释了这种行为
您的问题与 to this one 非常相似,但不是通过服务更新父属性,而是通过同步事件广播更新它。这是 linked answer 的引述:
During digest cycle Angular performs certain operations on child directives. One of such operations is updating inputs and calling ngOnInit lifecycle hook on child directives/components. What's important is that these operations are performed in strict order:
- Update inputs
- Call ngOnInit
因此,在您的情况下,Angular 更新了子组件上的输入绑定(bind) allItems
,然后在子组件上调用了 onInit
,这导致了对 allItems
的更新父组件。现在你有数据不一致。父组件有一个值,而子组件有另一个值。如果 Angular 继续同步更改,您将陷入无限循环。这就是为什么在下一个更改检测周期中,Angular 检测到 allItems
已更改并抛出错误。
这似乎是一个应用程序设计缺陷,因为您正在从父组件和子组件更新 details
。如果不是,那么您可以像这样异步发出事件来解决问题:
export class ChildComponent implements OnInit {
@Output() notify: EventEmitter<any> = new EventEmitter(true);
^^^^^^-------------
但是你必须非常小心。如果您使用在每个摘要周期调用的任何其他 Hook ,例如 ngAfterViewChecked
,您最终将陷入循环依赖!
关于Angular 4 ExpressionChangedAfterItHasBeenCheckedError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691745/
绕圈子讨论如何解决这个问题。阅读到处突出显示的两个博客。了解原因,但无论我尝试什么,这个错误都不会消失。错误与输入参数有关。当组件加载时,它是未定义的,然后获得正确的值。 我试过使用: 子组件中的各种
我正在用数组中的数据填充表格,我想将自定义输入集中在表格的最后一个元素上,所以我有这个: {{ a few table fields}}
我在我的 Angular 应用程序中做了一个加载微调组件。我用 *ngIf="isLoading"将它放在路由器导出旁边的应用程序组件中,这样我就可以让它在应用程序的任何地方都可见。 'isLoadi
我正在为我的项目集成一个加载指示器,其可见性将在 HTTP 拦截器服务中集中确定。但是,实现后,我收到以下错误: ExpressionChangedAfterItHasBeenCheckedErro
我正在实现以下*ngIf。我知道从技术上讲我不应该从 *ngIf 中调用函数,但黑客需要它: 无论如何,以下实现工作正常: 但是,由于某种原因,这个 *ngIf 被多次调用。所以我在第一个代码示例
我在主要组件的 [height] 上遇到以下错误并正在寻找解决方案 Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has
我的 Angular 应用程序的结构是页眉、主体和页脚,周围是一个 div。根据标题的高度(它是响应式的),我必须在周围的 div 上设置 padding-top。 为此,我向从 app.compon
我正在尝试解决 AngularJS 中不存在的问题,因为 $digest-循环会检查所有内容。 我正在尝试创建一个组件,它可以自行初始化(异步)并通知其周围的容器加载已完成。 我有这个伪表:
我创建了这个 Angular 7 应用程序,我试图按如下方式获取图像源: generateProfilePictures() { const p
我有一个父组件,它每秒更新一次它的数组 myValue。在子组件中,我想创建一个图表,它使用这个数组作为数据,并在每次父组件更新时更新。 当我运行此应用程序时出现此错误: Error: Express
我在使用 Angular 4 时遇到了一点问题。抛出以下错误 Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has ch
我需要在运行时动态创建多个组件的实例。 我在互联网上找到了几个示例,包括 StackOverflow 和 angular.io 页面本身。 但是当我为组件模型赋值时总是收到异常 ExpressionC
我有一个简单的 Angular 5 应用程序,它带有一个 HttpInterceptor,它会在发出请求时通知服务。组件可以订阅此服务以获取此信息。 此处有错误的完整示例=> https://stac
我正在尝试访问 ngOnit 中的 rest api,如下所示:- ngOnInit(): void { this.myModel = new myModel (); Observ
在父组件中 => ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. P
请向我解释为什么我不断收到此错误:ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was ch
我在选择器上使用 NGRX 过滤器,以根据过滤器的状态值过滤列表中的项目。首次加载页面时,没有问题。如果我刷新页面,我会收到 ExpressionChangedAfterItHasBeenChecke
我有一个简单的 Angular 组件,在渲染时抛出以下错误: MyComponent.html:10 ERROR Error: ExpressionChangedAfterItHasBeenCheck
怎么了? 在控制台中收到以下错误: AboutComponent.html:1 ERROR 错误:ExpressionChangedAfterItHasBeenCheckedError:检查后表达式已
正如标题所示,我试图在页面加载后向 div 元素添加一个类!我有一个条件 isTrue,并且在页面加载后执行的 Angular 函数 ngAfterViewInit() 使 isTrue 值为 tru
我是一名优秀的程序员,十分优秀!