【问题标题】:ERROR TypeError: Cannot read property 'ngInjectableDef' of undefined错误类型错误:无法读取未定义的属性“ngInjectableDef”
【发布时间】:2020-02-04 18:44:27
【问题描述】:

我在下面有一个抽象类:

import { Inject } from '@angular/core';
import { TestService } from '../test-service';

export abstract class DummyAbstract {

    constructor (
        private testService: TestService
    ) {

    }

    abstract thisisimp();
}

我有一个孩子的班级如下:

import { Injectable } from '@angular/core';
import { DummyAbstract } from './dummy-abstract';

@Injectable({
    providedIn: 'root'
})
export class ThisChild extends DummyAbstract {
    thisisimp() {
        return 'text';
    }
}

当我尝试在其他服务中加载子类时出现问题

import { Injectable } from '@angular/core';
import { ThisChild } from './this-child';

@Injectable({
    providedIn: 'root'
})
export class SomeOtherService {    
    constructor(private thisChild: ThisChild) {

    }
}

它会抛出以下错误

错误类型错误:无法读取未定义的属性“ngInjectableDef” 在 resolveNgModuleDep (core.js:8353) 在 NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9057) 在注入 (core.js:1403) 在 injectArgs (core.js:1437) 在 core.js:1491 在 _callFactory (core.js:8431) 在 createProviderInstance (core.js:8389) 在 resolveNgModuleDep (core.js:8364) 在 NgModuleRef.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9057) 在注入 (core.js:1403)

【问题讨论】:

    标签: javascript angular


    【解决方案1】:

    Angular 依赖注入系统只提取/解决依赖 用于编写 Injectable 装饰器的类。你必须自己处理其他事情。

    DummyAbstract 构造函数具有具有TestService 依赖项的构造函数,并且当您使用ThisChild 提供程序进行扩展时,您还没有将TestService 传递给DummyAbstract 的构造函数。每当遇到这种情况时,您都必须使用 super 方法将依赖项显式传递给父类,以调用基类构造函数。

    export class ThisChild extends DummyAbstract {
        constructor(testService: TestService) { // no private or public
           super(testService); //calling base class constructor with dependency.
        }
        thisisimp() {
            return 'text';
        }
    }
    

    【讨论】:

      【解决方案2】:

      由于这个问题的谷歌搜索结果不多,我将在这里提供我的解决方案(与这个特定问题无关,但具有相同的错误消息)。 所以基本上我也遇到了这个问题: 错误类型错误:无法读取未定义的属性“ngInjectableDef” 在错误开始出现之前和之后,代码中没有任何更改。 我所要做的就是删除 node_module 文件夹,刷新节点缓存并重新安装它,它就开始工作了。 据我所知,这与一些角度材料的变化有关。

      【讨论】:

      • 谢谢@DanielWaw,我的问题和你解释的完全一样。当我重新安装 npm 时,它就解决了。
      • 我刚刚重新启动了服务器,它对我有用。我得到了同样的错误--(in promise): TypeError: Cannot read property 'ngInjectableDef' of undefined TypeError: Cannot read property 'ngInjectableDef' of undefined at getInjectableDe....
      【解决方案3】:

      不要在里面使用模拟类对象 mockClassName = TestBed(mockClassName): 使用真正的导入类对象,如下所示 mockClassName = TestBed(ClassName):

      【讨论】:

        猜你喜欢
        • 2018-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 2021-11-22
        • 2018-07-12
        • 2021-12-16
        • 2020-08-16
        相关资源
        最近更新 更多