javascript - 如何修复 ChangeDetectorRef 导入错误 : No provider for ChangeDetectorRef

标签 javascript angular angular2-changedetection

我在将 ChangeDetectorRef 导入我的组件之一时遇到问题。

作为引用,家族树为 PComponent(父级)-> Options-Grid(子级)-> FComponent(孙级)。

这是我在浏览器中遇到的错误:

StaticInjectorError(AppModule)[FComponent -> ChangeDetectorRef]: 
  StaticInjectorError(Platform: core)[FComponent -> ChangeDetectorRef]: 
    NullInjectorError: No provider for ChangeDetectorRef!

错误将我带到的代码行在祖父组件 (PComponent) 中,它在其中实例化了第一个子组件 (Options-Grid)。

<div>
    <options-grid></options-grid>
</div>

我在构造函数中正确提供了 ChangeDetectorRef,并在 FComponent 中正确导入了它。代码中的错误引用指向我在其中实例化 Options-Grid 组件的 PComponent html。

这是因为我没有在父组件中提供 ChangeDetectorRef 吗?

最佳答案

所以我发现问题的原因是我试图在孙组件中使用 ChangeDetectorRef,这是一个禁忌。

我改为在根父组件 (PComponent) 中使用 ChangeDetectorRef,并且还为该组件实现了 ngAfterContentChecked() 方法。

这是它最终在 PComponent 中的样子:

import { Component, OnInit, ViewContainerRef, ChangeDetectorRef, AfterContentChecked } from '@angular/core';

export class PComponent implements OnInit, AfterContentChecked {

    constructor(private cdr: ChangeDetectorRef){}

    ngAfterContentChecked() {
        this.cdr.detectChanges();
    }

    ngOnInit() {
        ....
    }
}

关于javascript - 如何修复 ChangeDetectorRef 导入错误 : No provider for ChangeDetectorRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505726/

相关文章:

angular - IE11 Angular 2 错误 "Expected identifier, string or number"

angular - ngFor 依赖于另一个 ngFor 来完成渲染 - 获取 ExpressionChangedAfterItHasBeenCheckedError [Angular 2]

javascript - 只有在第一个完成后才启用第二个类型

javascript - 如何通过将 JavaScript 函数分配给不同的按钮来将函数应用于不同的元素

javascript - Flexbox、 Canvas 和动态调整大小

javascript - 这段代码如何运行变化检测 Angular ?

angular - ionic 模态变化检测

javascript - jquery cookie 通过循环追加值

javascript - 我如何使用 moment.js 添加天数,不包括周末?

html - 如何使两个选项卡在 Angular Material 2 中占用整个屏幕宽度