2016-09-14 8 views
1

Angular 2とTypeScriptを使用してファクトリメソッドを作成しようとしていますが、TSCコンパイラが誤ったエラーを投げているため、コンポーネントに型を渡してその型を工場に転送する

error TS1005: ',' expected. 

私はこのようなコンポーネントに@Input()として型を渡すしようとしています:

<custom-user [componentType]="CreateMeComponent"></custom-user> 

私はこのコードを持っている:

// custom-user.component.ts 
export class GalleriaCustomUserComponent implements OnChanges { 
    @Input() componentType: any; // is there a type for types, other than any? 
    @ViewChild(ComponentDirective) componentAnchor: ComponentDirective; 

    ngAfterViewInit() { 
     this.componentAnchor 
      .createComponent<this.componentType>(); // this line throws the ',' error 
    } 
} 

そしてディレクティブは次のようになります。

// component.directive.ts 
@Directive({ 
    selector: '[componentAnchor]' 
}) 
export class ComponentDirective { 
    constructor(
     private viewContainer: ViewContainerRef, 
     private componentFactoryResolver: ComponentFactoryResolver 
    ) {} 

    public createComponent<MyComponent>() { 
     this.viewContainer.clear(); 

     let componentFactory = 
      this.componentFactoryResolver.resolveComponentFactory(MyComponent); 
     let componentRef = this.viewContainer.createComponent(componentFactory); 

     return componentRef; 
    } 
} 

これは可能ですか?それとも悪いデザインですか?

答えて

0

ビューバインドでタイプ名を使用することはできません。コンポーネントインスタンスまたはテンプレート変数への参照のみがサポートされています。その後、あなたはそれを使用することができ、コンポーネントのプロパティにタイプを割り当てます。あなたの答えのための

<custom-user [componentType]="createMeComponent"></custom-user> 
createMeComponent = CreateMeComponent; 
+0

感謝を。その場合、タイプの名前に基づいて汎用メソッドに渡すことができるタイプを取得することは可能ですか? – serlingpa

+0

申し訳ありませんが、TSのジェネリックについてよく分かりません。私はAngular2で実際にTSを使用していません。 –

+0

あるいは、 '' '' 'ComponentFactoryResolver.resolveComponentFactory()' ''を、型自体ではなく型名の文字列で呼び出すことは可能ですか? – serlingpa

関連する問題