2016-07-01 11 views
0

私のプロジェクトでは、いくつかの要素を動的に読み込んでいますが、その要素のクリックイベントを生成することはできません。ダイナミックコンポーネントClickイベントバインディングAngular2

import {Component, DynamicComponentLoader, Injector} from 'angular2/core'; 


@Component({ 
    selector: 'my-app', 
    providers: [], 
    template: ` 
    <button (click)="form()"> 
    View Form 
    </button> 
    <div id="form" [innerHTML]=""> 
     Welcome..! Here form component will be loaded. 

    </div> 
    `, 
    directives: [] 
}) 
export class App { 
    private strForMarkets = ""; 
    private sbForMarkets: Array<string> = []; 
    constructor(public dcl:DynamicComponentLoader, public _injector:Injector) { 
    } 
    form() { 
     var s = ["a", "s", "d", "p"]; 
     this.sbForMarkets.push("<div><ul>") 
     for (var index = 0; index < s.length; index++) { 
      var element = s[index]; 
      this.sbForMarkets.push("<li class='OH liDataLeftFilterMarketsContainer'>"); 
      this.sbForMarkets.push("<div class='FL sprite_icon expand-icon-market'></div>"); 
      this.sbForMarkets.push("<div class='expand-text-div CP FT14 LH15' (click)='chill($event)' >" + element + "</div>"); 
      this.sbForMarkets.push("</li>"); 
     } 
     this.sbForMarkets.push("</ul></div>"); 
     this.strForMarkets = this.sbForMarkets.join(""); 
    } 

    chill() { 
     console.log("Dude... Chill "); 
    } 
} 

p.s.私は動的なコンポーネントローダーで試してみましたが、テンプレート内のすべてのhtmlであれば動作します。

+0

あなたはそれをどこに追加しますか? 'this.dcl.loadXxx()'コードはどのように見えますか? 'DynamicComponentLoader'は非推奨です。代わりに' ViewContainerRef.createComponent() 'を使用してください。たとえば、http://stackoverflow.com/questions/36325212/angular-2-dynamic-tabs-with-user-click-chosen-components/36325468#36325468 –

答えて

0

Angular2は、[innerHTML]="..."などを使用して動的に追加されたHTMLを処理しません。(click)はそのまま無視され、そのまま追加されます。

可能であれば、HTMLをコンポーネントにラップし、代わりにViewContainerRef.createComponent()を使用してください。例についてはAngular 2 dynamic tabs with user-click chosen components

+0

を参照してください。そして私はあなたが持っているデータのための別々のコンポーネントを持っているその例でもう一つの疑問を持っています。私のデータはデータベースから来ています。だから私はコンポーネントを持っていることができないのですか? – Lucifer

+0

「FT14 LH15」のようなコンテンツを意味しますか? Angularバインディングを使用すると、 '{{someProp}}や' * ngFor'のようにDOMに追加してデータからHTMLを生成できます。 https://angular.io/docs/ts/latest/guide/template-syntax.html –

+0

FT14とLH15の意味は分かりませんが、そのリンクが私の問題を解決することができます。 – Lucifer

関連する問題