2017-09-22 18 views
0

私は、inputとしてelementIdを取得するAngular 2コンポーネントを持っており、それをdivのid属性として設定します。何らかの理由でdivのIDが設定されません。角度2入力IDが要素にバインドされていません

@Component({ 
    selector: 'my-chart', 
    template: ` 
     <div> 
      Hello {{elementId}} 
      <div [id]="elementId"></div> 
     </div> 
    ` 
}) 

export class MyChartComponent implements OnInit, OnChanges { 
    @Input() elementId: string; 

    ngOnInit() { 
     this.createChart(); 
    } 

    createChart() { 
     console.log("ID: ", this.elementId); 
     ... 
    } 
} 

これは、それが親コンポーネントで次のようになります。

<div *ngFor="let chart of charts"> 
    <my-chart [elementId]="chart.id"></my-chart> 
</div> 

-

私はdiv要素に要素を検査するとき、それはid属性がONに設定されなかったことを示していますHTML要素。また、Hello {{elementId}}は "Hello"のみを表示します。要素の記入はありません。下の写真を参照してください。

しかしconsole.log文は正しく結合入力が正しいことを示す、IDを出力します。

画像:Inspect Element shows id is missing

答えて

0

を使用する必要があります結合が起こった場所の場所は、すべてのHTMLとJSです。

あなたはAfterViewInit方法で、外部のDOM monuplationを記述する必要があります。

export class MyChartComponent implements OnInit, OnChanges, AfterViewInit { 
    @Input() elementId: string; 

    ngOnInit() { 

    } 

    ngAfterViewInit(): void { 
     console.log("ID: ", this.elementId); 
     Plotly.newPlot(this.elementId, ...); 
    } 
} 
+1

あなたの答えはありがたいですが、これもうまくいきませんでした。私は問題がコールのタイミングに関係しているとは思わない。問題は、divのIDが設定されていないことです。もはや私がどれくらい待っても、IDはまだ設定されていません。 ngOnInit()のconsole.logはthis.elementId **が**存在し、正しくバインドされていることを示しています。 – florentine

+0

ええ、それは私が得たものです。 –

+0

こんにちはAniruddha、私はもう少し明確な質問を編集しました!ありがとう – florentine

0

document.getElementById();の等価は角にあり、あなたがそれを使用することができます。

あなたはjQueryのに使用される角度とquerySelector方法で要素参照(ElementRef)を使用することができます。そうではなく、文書を使用して

constructor(private elementRef: ElementRef) { 
    } 

    // this is inside any of the method 
    // this is to select multiple 
    this.elementRef.nativeElement.querySelectorAll('.mandate'); 

    // this is to select single 
    this.elementRef.nativeElement.querySelector('.mandate') 

、あなたは角度ライフサイクルAfterViewInitでElementRef

+0

私が使用しているライブラリはdocument.getElementByIdを使用しています。そのため、私はその選択については選択肢がありません。そのため、divのid属性が正しく設定されていることを確認する必要があります。私はそれをより明確にするために私の質問を編集しました。 – florentine

+0

別の回答を追加 –

関連する問題