构造函数中的角度允许继承服务声明



我有一个组件HomeComponent,我有两个服务: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

也许angular有一个微妙之处,因为Injectable或类似的东西,我知道DogService的构造函数没有被调用,因为我的网络浏览器暗示它是一个AnimalService。如果我执行dogService = New DogService而不是在构造函数中声明它,则情况并非如此。但我不明白为什么。

有什么想法吗?

问题在于SuperClass中的注释。不要对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');
}
}

最新更新