私は奇妙な状況に遭遇し、それが正しいかどうか議論したい. (最後に小さな質問の更新も探してください)
angular 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() {
//...
};
}
これを可能にするために、子から Injector を渡すことができます。
@Component({
// ...
})
export class SidePanelOne extends SidePanel {
constructor(injector: Injector) {
super(injector);
}
//rest of body
}
しかし、私には子供が多すぎるため、そうしたくありません。その場合、それらすべてにインジェクターを追加する必要がありました。だから私は簡単な解決策を見つけました(しかし、それが正しいかどうかはわかりません):
@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:
判明したように、上記の状況では、Injectable の代わりに「空の」Component デコレータを使用できます。
@Component({})
export abstract class SidePanel {
// body
}
メタデータが空のコンポーネントは何を意味するのか、それを使用するのは正しいのか、すべてのパラメーターがオプション (セレクターも含む) なのはなぜですか?