2016-03-17 3 views
1

У меня есть компонент А, это плагин к index.html, и есть шаблон:Как плагин компонента в другой компонент

<div> content of A </div> 
<component-will-plugin></component-will-plugin> 
<button (click)="pluginBtoA()">click me to plugin B to plugin A </button> 

и код функции pluginBtoA:

pluginBtoA(){ 
    redirectToB; 
} 

Как подключить компонент B в компоненте A, когда я нажимаю кнопку?

Спасибо за прочитайте мой вопрос.

ответ

2

Вы можете использовать DynamicComponentLoader и его loadIntoLocation метод так:

@Component({ 
    selector: 'my-app', 
    template: ` 
    Parent 
    <div #child></div> 
    <div (click)="onClick()">Add sub component</div> 
    ` 
}) 
export class MyApp { 
    constructor(private dcl: DynamicComponentLoader, 
       private elementRef: ElementRef) { 
    } 

    onClick() { 
    this.dcl.loadIntoLocation(ChildComponent, this.elementRef, 'child'); 
    } 
} 
+0

Тьерри, у меня есть вопрос при многократном нажатии на кнопку, тогда содержимое добавляется. Например, html ChildComponent - «123». Первый щелчок, содержимое дочернего div -

123
. Содержимое второго клика дочернего элемента div равно
123123
. Пожалуйста, помогите мне решить его. – Nguyen

+0

Возможно, 'loadNextToLocation' - это то, что вам нужно ... –

2

Этот пример является адрес страницы Angular2 IO.

@Component({ 
    selector: 'child-component', 
    template: 'Child' 
}) 

class ChildComponent { 
} 

@Component({ 
    selector: 'my-app', 
    template: 'Parent (<div #child></div>)' 
}) 

class MyApp implements OnInit { 
    constructor(private dcl: DynamicComponentLoader, private elementRef: ElementRef) { 

    } 

    ngOnInit(){ 
     this.dcl.loadIntoLocation(ChildComponent, this.elementRef, 'child'); 
    } 
} 

Вы можете прочитать об этом https://angular.io/docs/ts/latest/api/core/DynamicComponentLoader-class.html#!#loadIntoLocation

Теперь вы можете перемещать this.dcl.loadIntoLocation(ChildComponent, this.elementRef, 'child'); в вызывающей функции, когда вы, например, нажмите

:

pluginBtoA(){ 
    //redirectToB; 
    this.dcl.loadIntoLocation(ChildComponent, this.elementRef, 'child'); 
}