2016-06-16 7 views
0

Ich möchte dynamisch wechseln, welche templateUrl für eine Angular 2/Dart Komponente verwendet werden soll.Wie erstellt man eine dynamische Komponente in Angular 2 mit Dart?

Ich habe herausgefunden, dass der Weg zu gehen wäre, dynamisch eine neue Komponente zu erstellen, um die VorlageUrl für zu platzieren. Es gibt mehrere Beispiele dafür, wie man dies mit Angular 2 ComponentResolver mit TypeScript, for example this one erreichen kann, aber ich habe es versäumt, sie in Dart zu übersetzen.

Im Grunde, was ich nicht eine neue Komponente aus einer Funktion zu tun ist vorbei:

createComponentFactory(ComponentResolver resolver, 
     ComponentMetadata metadata) { 
    final cmpClass = class DynamicComponent {}; 
    final decoratedCmp = Component(metadata)(cmpClass); 
    return resolver.resolveComponent(decoratedCmp); 
} 

Das Problem mit diesem und anderen ähnlichen Ansätzen mit Dart ist, dass ich nicht class DynamicComponent {}; auf eine Variable einstellen oder diese von einer Rückkehr Funktion ohne Fehler wie bauen diese zu bekommen:

[DirectiveProcessor]: 
    Failed with 5 errors 
Error 1: line 37, column 22 of lib/projects/project_component.dart and parts: Expected an identifier 
    final cmpClass = class DynamicComponent {}; 
        ^^^^^ 
Error 2: line 37, column 22 of lib/projects/project_component.dart and parts: Expected to find ';' 
    final cmpClass = class DynamicComponent {}; 
        ^^^^^ 
Error 3: line 37, column 22 of lib/projects/project_component.dart and parts: Expected a statement 
    final cmpClass = class DynamicComponent {}; 
        ^^^^^ 
Error 4: line 37, column 22 of lib/projects/project_component.dart and parts: Unexpected token 'class' 
    final cmpClass = class DynamicComponent {}; 
        ^^^^^ 
Error 5: line 37, column 28 of lib/projects/project_component.dart and parts: Expected to find ';' 
    final cmpClass = class DynamicComponent {}; 
          ^^^^^^^^^^^^^^^^ 

eine neue Komponente wie folgt zu schaffen, ist die gemeinsame für mich Hemmschuh, wenn eine der folgenden Beispiele I für die Erstellung einer dynamischen Komponente gesehen habe. Hat jemand herausgefunden, wie Sie das mit Dart erreichen können?

Antwort

1

In Dart können Klassen nicht inline deklariert werden.

sollte dies tun, was Sie wollen

class DynamicComponent {} 

createComponentFactory(ComponentResolver resolver, 
     ComponentMetadata metadata) { 
    final cmpClass = DynamicComponent; 
    final decoratedCmp = Component(metadata)(cmpClass); 
    return resolver.resolveComponent(decoratedCmp); 
} 

Wäre nett, um die vollständige Lösung zu sehen, wenn Sie es arbeiten machen.

+1

Vielen Dank! Dies löst das Problem, das ich mit der Klassendeklaration hatte. Ich arbeite immer noch an der ganzen Lösung und sobald ich etwas habe, das richtig funktioniert, werde ich hier die endgültige Version veröffentlichen. – DarthKipsu