我遇到了奇怪的情况,想讨论是否正确。 (请在最后查看小问题更新)
在角度4.3中,我有一些抽象类,它由几个角度分量扩展。它看起来像:
export abstract class SidePanel {
protected prop1;
protected prop2;
protected method1() {
//...
};
}
@Component({
// ...
})
export class SidePanelOne extends SidePanel {
// body
}
@Component({
// ...
})
export class SidePanelTwo extends SidePanel {
// body
}
我想在父类SidePanel中添加一些常用功能,并且需要使用angular的Injector。所以我想做这样的事情:
export abstract class SidePanel {
protected prop1;
protected prop2;
constructor(injector: Injector){
this.prop1 = injector.get(MyClassName);
}
protected method1() {
//...
};
}
为了使我能够从儿童传递注射器:
@Component({
// ...
})
export class SidePanelOne extends SidePanel {
constructor(injector: Injector) {
super(injector);
}
//rest of body
}
但是我不想这样做,因为我有太多的孩子,在这种情况下我必须在所有这些中添加Injector。 所以我找到了简单的解决方案(但不确定它是否正确):
@Injectable()
export abstract class SidePanel {
protected prop1;
protected prop2;
constructor(injector: Injector){
this.prop1 = injector.get(MyClassName);
}
protected method1() {
//...
};
}
@Component({
// ...
})
export class SidePanelOne extends SidePanel {
private test() {
this.prop1.myClassMethod(); // works!
}
// rest of body
}
因此,我的子类(组件)不必拥有自己的构造函数,只能注入和传递Injector,一切正常。 但是在抽象类上应用Injectable()装饰器看起来很奇怪。
是否正确?
提前感谢您的意见。
更新14.03:
事实证明,对于上述情况,可以使用'空'组件装饰器而不是注入:
@Component({})
export abstract class SidePanel {
// body
}
它也令人困惑:具有空元数据的组件意味着什么,使用它是正确的以及为什么所有参数都是可选的(甚至是选择器)?