角度typescriptです内のコンポーネントに、実行時にサービスを作成し、配線するためにここに私のユースケースです:はどのように手動で2
私は4つの異なる実装WorkflowA
、WorkflowB
、WorkflowC
とWorkflowD
とのインタフェースを持っています。 (?Factoryパターン)
export interface IWorkflow {
getQuestions();
validateQuestions();
getWorkflowSteps();
}
Iは入力変数に基づいて適切なワークフローを返すWorkflowManager
クラスを有する
export class WorkflowManager {
workflow:IWorkflow;
getWorkflow(workflow){
switch (workflow) {
case 'workflowA':
return new workflowA();
case 'workflowB':
return new workflowB();
case 'workflowC':
return new workflowC();
case 'workflowD':
return new workflowD();
default:
throw new Error(`Unrecognized workflow: ${workflow}`);
}
}
}
Iはまた
例ロードされるコンポーネントWorkflowComponent
有する: を/workflow=WorkflowA
ロードWorkflowComponent
。次に、コンポーネントはrouteparam workflow
を抽出し、その値に基づいて適切なワークフローを返すWorkflowManager
に渡します。
は、ここに私のコンポーネント
@Component({
...
})
export class Workflow implements OnInit {
workflowInstance: IWorkflow;
constructor(
private route: ActivatedRoute,
private workflowManager: WorkflowManager,
) {
}
ngOnInit() {
this.route.params.subscribe(params => {
let regType: string = params['workflow'];
this.workflowInstance = this.workflowManager.getWorkflow(workflow);
});
}
}
の抜粋だが、私は手動でWorkflow*
のクラスをインスタンス化のアイデアを好きではありません。これを改善して、Angular2が提供するAPIを使用してワイヤリングすることで、他のコンポーネントに管理/注入することができます。
私の現在の実装では、Angularフレームワークの外でajax呼び出しを行う必要があります。私はこれを行うのが最善ではないと思います。
角度フレームワークを利用してこれを改善する方法に関するアイデアはありますか?
ありがとうございました。とにかくこれをさらに改善するには、すべてをインスタンス化せず、毎回必要なものだけをインスタンス化します。 – user6123723
あなたは何を意味するか分かりません。上記のコードは、 'workflow'パラメータによって明示的に要求されるものだけをインスタンス化します。すべてのDIを使用してコンストラクタパラメータを使用してインスタンスを挿入すると、すべてを一度にインスタンス化します。 –
返されたthis.injector.get(workflowA)は、このクラスで既に宣言されているインスタンスである 'workflowA'(単語の先頭に小文字の「w」があることに注意してください)ですか?どのように角度選択WorkflowAクラスは 'workflowA'からthis.injector.get(workflowA)文を返しますか?ありがとうございました。 – user6123723