我有一个组件home组件,我有两个服务:animalservice和dogservice
DogService像这样扩展了AnimalService:

@Injectable({providedIn: 'root'})
export class AnimalService {
    constructor() {}
    move(): any {
        console.log('move animal');
    }
}

@Injectable({providedIn: 'root'})
export class DogService extends AnimalService {
    constructor() {
        super();
    }
    scream(): any {
        console.log('il crie');
    }
}

然后我想通过调用组件中的尖叫函数来使用它:
    @Component({
        selector: 'jhi-home',
        templateUrl: './home.component.html',
        styleUrls: ['home.scss']
    })
    export class HomeComponent implements OnInit {

        constructor(private dogService: DogService) {}

        ngOnInit() {
            this.dogService.scream(); // the error here : scream is not a function
        }
    }

但我有以下错误:
this.dogService.scream is not a function

也许有一个角度的微妙之处,因为可注射或类似的东西,我知道dogservice的构造器没有被调用,我的webbrowser认为它是一个动物服务。如果我执行dogService = New DogService而不是在构造函数中声明它,情况就不是这样了。但我不明白为什么。
有什么想法吗?

最佳答案

问题是你的超类中的注释。不要为AnimalService添加批注。它必须是一个抽象的简单类。

export abstract class AnimalService {
    constructor() {}
    move(): any {
        console.log('move animal');
    }
}

@Injectable({providedIn: 'root'})
export class DogService extends AnimalService {
    constructor() {
        super();
    }
    scream(): any {
        console.log('il crie');
    }
}

09-28 11:17