最近我们从 Angular 2.0 升级到 2.4,从那时起我们就遇到了继承问题。
如果我们调用子进程,所有依赖项都会变得未定义。
这是代码:
@Injectable()
export class ChildComponent extends ParentComponent {
}
export class ParentComponent implements OnInit, AfterViewInit, AfterViewChecked {
constructor(protected _activitySettingsControlService: ActivitySettingsControlService,
protected _changeDetectionRef: ChangeDetectorRef,
protected _elemRef: ElementRef,
protected _apiService: ApiService) {
}
所有依赖项都以这种方式未定义。
可能是什么原因?
没有完整的例子,我们只能猜测。考虑使用以下内容作为请求的起点最小、完整且可验证的示例 https://stackoverflow.com/help/mcve.
显示组件继承和服务注入协同工作的代码示例:
import { Component, Injectable } from '@angular/core';
@Injectable()
export class SomeDependency {
public foo() {
return 'bar';
}
}
@Component({
selector: 'parent-comp',
template: `<h1>Hello from ParentComponent {{name}}</h1>`,
providers: [
SomeDependency
]
})
export class ParentComponent {
public name;
constructor(private dep: SomeDependency) {
this.name = this.dep.foo();
}
}
@Component({
selector: 'child-comp',
template: `<h1>Hello from ChildComponent. SomeDependency returned {{name}}</h1>`,
providers: [
SomeDependency
]
})
export class ChildComponent extends ParentComponent {
}
@Component({
selector: 'my-app',
template: `<child-comp></child-comp>`
})
export class AppComponent {
}
请参阅此 plunker 的工作示例:http://embed.plnkr.co/5VNDF6/ http://embed.plnkr.co/5VNDF6/
我(也)是在 SO 中提供示例的新手,所以我可能错过了一些最佳实践。希望人们能够提出改进建议。
值得注意的是,这种组件继承恕我直言不是最好的做事方式——我更喜欢组件的组合而不是继承。继承 - 如果确实需要 - 可能更适合服务:http://embed.plnkr.co/jWiOTg/ http://embed.plnkr.co/jWiOTg/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)