2016-03-03 162 views
2

我已經使用typeScript創建了以下使用angular2的dynamicComponentloader的應用程序。 但我的孩子組件沒有得到渲染。 Snapshot of my app在angular2中使用動態組件加載器?

我的組件:

import {Component, Directive, ElementRef, Renderer,DynamicComponentLoader} from 'angular2/core'; 
import {RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router'; 
import {DynamicBody1Component} from './ICICI-DYNAMIC-BODY-1.component'; 

@Directive({ 
    selector: '[x-large]' 
}) 
export class XLarge { 
    constructor(element: ElementRef, renderer: Renderer) { 
    // we must interact with the dom through Renderer for webworker/server to see the changes 
    renderer.setElementStyle(element.nativeElement, 'fontSize', 'x-large'); 
    } 
} 


@Component({ 
    selector: 'app', 
    directives: [ 
    ...ROUTER_DIRECTIVES, 
    XLarge 
    ], 
    styles: [` 
    .router-link-active { 
     background-color: lightgray; 
    }` 
    ], 
    template: ` 
    <div>  
     <div> 
      <span x-large>Hello, {{ name }}!</span> 
     </div> 
     <div> 
      <div #container></div> 
     </div> 
     </div> 
     ` 
}) 
export class App { 
    name: string = 'Angular 2'; 
    public dynamicComponentLoader: DynamicComponentLoader; 
    constructor(dynamicComponentLoader: DynamicComponentLoader, private  elementRef: ElementRef) {} 

    ngOnInit() { 
    this.dynamicComponentLoader.loadIntoLocation(DynamicBody1Component, this.elementRef, 'container'); 

    } 
} 

是這裏有什麼問題? 在此先感謝。

回答

2

對於跟上時代的例子中看到Angular 2 dynamic tabs with user-click chosen components

不能使用在constructor()dynamicComponentLoader了。它移動到ngOnInit()

import {Component, Directive, ElementRef, Renderer,DynamicComponentLoader} from 'angular2/core'; 
import {RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router'; 
import {DynamicBody1Component} from './DYNAMIC-BODY-1.component'; 

@Directive({ 
    selector: '[x-large]' 
    host: { 
    '[style.fontSize]': 'x-large', 
    } 
}) 
export class XLarge { 
} 


@Component({ 
    selector: 'app', 
    directives: [ 
    ...ROUTER_DIRECTIVES, 
    XLarge 
    ], 
    styles: [` 
    .router-link-active { 
     background-color: lightgray; 
    } 
    `], 
    template: ` 
    <div>  
    <div> 
     <span x-large>Hello, {{ name }}!</span> 
    </div> 
    <div> 
     <div #container></div> 
    </div> 
    </div> 
    ` 
}) 
export class App { 
    name: string = 'Angular 2'; 
    constructor(private dynamicComponentLoader: DynamicComponentLoader, private elementRef: ElementRef) {} 

    ngOnInit() { 
    this.dynamicComponentLoader.loadIntoLocation(DynamicBody1Component, this.elementRef, 'container'); 

    } 
} 
+0

我想你的解決方案,現在我得到這個錯誤;'例外:類型錯誤:無法讀取屬性「loadIntoLocation類型錯誤:在[空] 原始異常無法讀取屬性未定義「loadIntoLocation」 'undefined' ...查看有問題的代碼 –

+0

對不起,忘了在構造函數之前刪除'App'中的一行。 –

+0

@ gunter.its仍然無法正常工作。詳情請參閱快照。我正在使用通用啓動器進行服務器端渲染。沒有錯誤顯示。但我的組件也沒有得到加載瀏覽器。 –