ОШИБКА TypeError: Невозможно прочитать свойство 'ngInjectableDef' из неопределенного - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть абстрактный класс ниже:

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) {

    }
}

Выдает следующую ошибку

ОШИБКА TypeError: Невозможно прочитать свойство 'ngInjectableDef' из неопределенного at resolNgModuleDep (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) at resolNgModuleDep (core.js: 8364) в NgModuleRef .push ../ node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js: 9057) при вводе (core.js: 1403)

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Поскольку по этой проблеме в результатах поиска Google не так много, я предоставлю свое решение здесь (не связано с этой конкретной проблемой, но с тем же сообщением об ошибке). Так что, в принципе, я тоже получаю эту проблему: ОШИБКА TypeError: Невозможно прочитать свойство 'ngInjectableDef' из неопределенного Ничего не изменилось в коде до и после появления ошибки. Все, что мне нужно было сделать, это удалить папку node_module, очистить кеш узла и переустановить его, и он начал работать. Насколько я знаю, это было связано с некоторыми угловатыми материальными изменениями.

0 голосов
/ 07 ноября 2018

Система угловой инъекции только извлекает / разрешает зависимость для класса, на котором написано 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';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...