2016-05-06 2 views
6

В угловом 2 можно вручную создать экземпляр компонента A, затем передать его и отобразить в шаблоне компонента B?Возможно ли вручную создать компонент в угловом 2

+0

Добро пожаловать на SO пожалуйста, проверьте этот [URL] (http://stackoverflow.com/help) будет помогать вам повысить качество контента вопроса –

ответ

0

Да, это поддерживается. Вам нужен ViewComponentRef, который можно, например, получить, вставив его в конструктор или с помощью запроса @ViewChild('targetname') и ComponentResolver, который также может быть введен.

Этот пример кода из https://stackoverflow.com/a/36325468/217408 позволяет, например, добавлять компоненты динамически *ngFor

@Component({ 
    selector: 'dcl-wrapper', 
    template: `<div #target></div>` 
}) 
export class DclWrapper { 
    @ViewChild('target', {read: ViewContainerRef}) target; 
    @Input() type; 
    cmpRef:ComponentRef; 
    private isViewInitialized:boolean = false; 

    constructor(private resolver: ComponentResolver) {} 

    updateComponent() { 
    if(!this.isViewInitialized) { 
     return; 
    } 
    if(this.cmpRef) { 
     this.cmpRef.destroy(); 
    } 
    this.resolver.resolveComponent(this.type).then((factory:ComponentFactory<any>) => { 
     this.cmpRef = this.target.createComponent(factory) 
    }); 
    } 

    ngOnChanges() { 
    this.updateComponent(); 
    } 

    ngAfterViewInit() { 
    this.isViewInitialized = true; 
    this.updateComponent(); 
    } 

    ngOnDestroy() { 
    if(this.cmpRef) { 
     this.cmpRef.destroy(); 
    }  
    } 
} 
+1

, этот пример не позволяет создавать экземпляр компонента с данными. – dopatraman

+0

Не уверен, что вы имеете в виду. Более полный пример в связанном ответе показывает, как передавать и вводить данные. –

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