Hier ist mein Anwendungsfall erstellen und Draht:Wie man manuell einen Dienst zur Laufzeit auf eine Komponente in Typoskript Angular 2
Ich habe eine Schnittstelle mit 4 verschiedenen Implementierungen WorkflowA
, WorkflowB
, WorkflowC
und WorkflowD
.
export interface IWorkflow {
getQuestions();
validateQuestions();
getWorkflowSteps();
}
Ich habe eine WorkflowManager
Klasse, die den entsprechenden Workflow auf einer Eingangsgröße
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}`);
}
}
}
ich auch eine Komponente haben WorkflowComponent
Basis zurückgibt, die
Beispiel geladen wird (Werksmuster?): /workflow=WorkflowA
lädt WorkflowComponent
. Die Komponente extrahiert dann das routeparam workflow
und übergibt es dann basierend auf dem Wert an die WorkflowManager
, die den entsprechenden Workflow zurückgibt.
Hier ist ein Ausschnitt aus meiner Komponente
@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);
});
}
}
Aber ich weiß nicht, wie die Idee der Workflow*
Klassen manuell instanziieren. Wie kann ich dies verbessern, damit ich es mit der von Angular2 gelieferten API verdrahte, so dass es in andere Komponenten verwaltet/injiziert werden kann?
Auch in meiner aktuellen Implementierung werde ich Ajax-Aufrufe außerhalb von Angular Framework machen müssen, was meiner Meinung nach nicht das Beste ist.
Haben Sie Ideen, wie Sie das Angular-Framework nutzen und dieses verbessern können?
Danke. Wie auch immer, um dies weiter zu verbessern, indem nicht alles instanziiert wird, sondern nur das, was jedes Mal benötigt wird? – user6123723
Nicht sicher, was du meinst. Der obige Code instanziiert nur, was explizit durch den Parameter "workflow" angefordert wird. Wenn Sie eine Instanz über alle DI mit Konstruktorparametern einfügen würden, würde dies alle auf einmal instanziieren. –
Im Gegenzug this.injector.get (workflowA), ist 'workflowA' (beachten Sie den kleinen Buchstaben 'w' am Anfang des Wortes) eine bereits in dieser Klasse deklarierte Instanz? Wie wählt Angular WorkflowA-Klasse aus 'workflowA' im Gegenzug this.injector.get (workflowA) aus? Vielen Dank. – user6123723