2016-10-30 4 views
0

Я хотел бы послать компонент внутри значения компонента, когда у меня есть это:доступа экспортируется компонент в компоненте

@Component({ 
    selector: 'my-component', 
    templateUrl: 'my.template.html' 
}) 
export class MyComponent { 
    private myVar: any; 

    constructor(){ 

    } 
    myFunction() =>{ 

    } 
} 

Вне класса я могу просто позвонить:

import { MyComponent } from './my.component'; 

Но Я хотел бы получить MyComponent в классе:

myFunction() =>{ 
    this.myVar = **MyComponment** 
} 

Как получить **MyComponent**?

Обратите внимание: я не хочу экземпляр, но вам нужен сам класс.

EDIT: Я понимаю, что мой вопрос недостаточно ясен. Вот что мне нужно сделать ... Мне нужно извлечь компонент и воссоздать его где-то еще. В другом компоненте у меня есть следующие:

export class MyOtherComponent {  
    constructor(private viewContainer: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver){ 

    } 
    createComponent(myComponent) =>{ 
     var factory = this.componentFactoryResolver.resolveComponentFactory(myComponent); 
     var compRef = this.viewContainer.createComponent(factory); 
     container.getElement().append($(compRef.location.nativeElement)); 
    } 
} 

Так Внутри MyComponent я хочу быть в состоянии сделать это:

myFunction() =>{ 
    this.myOtherComponent.createComponent(**MyComponent**) 
} 
+3

Вы можете обратиться к классу компонентов как 'MyComponent' или' this.constructor'. Какую цель должен выполнять 'this.myVar = ** MyComponment **'? Он не пахнет слишком хорошо. – estus

+0

@estus Я знаю, что это не супер чисто, но мне нужно извлечь компонент и воссоздать его где-то еще. Один из вариантов заключается в том, чтобы перечислить весь компонент, где бы я ни хотел его воссоздать, но я бы предпочел избежать и сделать его более гибким, отправив его в качестве аргумента ... это имеет смысл? – ncohen

+0

@estus BTW Я воссоздаю компонент следующим образом: this.componentFactoryResolver.resolveComponentFactory (MyComponent); 'so' this.constructor' дает мне следующую ошибку: 'Не найдена фабрика компонентов для MyComponent' Любая идея, что я мог бы сделать? – ncohen

ответ

1

Вы должны быть в состоянии просто обратиться к нему с именем класса.

class MyComponent { 
    private myVar: MyComponent; 

    constructor(){ 
     console.log("created!") 
    } 
    myFunction() { 
     var myVar = MyComponent; 
     new myVar(); 
    } 
} 

Вы можете проверить полученный JS here.

+0

Спасибо, пожалуйста, см. Мое редактирование для получения более подробной информации ... в основном с вашим решением. Я получаю следующую ошибку: 'Никакой компонентной фабрики не найден для MyComponent' всякий раз, когда я вызываю' resolveComponentFactory() ' – ncohen

+0

Я забыл добавить' MyComponent' в ' entryComponents' в моих модулях – ncohen

Смежные вопросы