2016-04-19 6 views
0

HTTP getを使用して外部ソースからhtmlブロックを取得し、innerHTML関数を使用してアプリケーションに挿入します。私はgetElementsByClassNameでそのクラス名でdivクラスにアクセスしようとしています。私は、インデックス、で、リスト内のオブジェクトのいずれかにアクセスしようとすると外部ソースからフェッチされたHTMLからのgetElementByClass - >未定義

enter image description here

(EX結果[0])、私は戻って、未定義の取得:これはRESPONSがどのように見えるかです。誰がなぜこれが起こるのか知っていますか?

ありがとうございます!

更新:

私は問題が何かを発見しました。 htmlは私がアクセスしようとする前に適切に初期化されていませんでした。

これは私のサービスクラスからhtmlブロックを取り出す私の関数です。

<div *ngIf="news_block" [innerHtml]="news_block"></div> 
+0

実際に行っていることを示すコードを表示してください。理想的には、再現を可能にするプランナー。 –

+0

Iveが問題を発見しました.HTMLはアクセスしようとする前に適切に初期化されていませんでした。まず、ngOnInitで関数を実行しました。私はngAfterViewInit()を使用しようとしましたが、それは私の問題を解決しませんでした。提案はありますか? –

+0

実際のコードを見ずに述べたように、提案するのは難しいです。 –

答えて

1
:私は私のセレクタにgetNewsFeed()からの回答をロード私はngAfterViewInit

ngAfterViewInit(){ 
     console.log(document.getElementsByClassName("overlayWrapper")); 

    } 

でgetElementByClassNameを実行

ngOnInit(){ 
     this.getNewsFeed(); 
} 

getNewsFeed(){ 
     this.homeService.getNewsFeed() 
     .subscribe(res => 
     this.news_block = res, 
     error=>this.news_feed_error=true, 
     ()=> this.news_feed_error=false 
    ); 

getNewsfeedから実行されます

bservableはデータasyncを返し、.subscribe()に渡されたコールバックが実行されます。

データが到着するとき、またはデータが到着することは保証されません。 getNewsFeed()が結果を返すことを保証できるAngularコールバックはありません。

ない最適けどimprovmentする必要があります:

getNewsFeed(){ 
    this.homeService.getNewsFeed() 
    .subscribe(res => { 
     this.news_block = res; 
     setTimeout(() => checkElement(); 
    }, 

    error=>this.news_feed_error=true, 
    ()=> this.news_feed_error=false 
); 
} 

checkElement(){ 
    console.log(document.getElementsByClassName("overlayWrapper")); 

} 

少なくともgetElementsByClassName()が呼び出されたときにHTMLが実際に受信されている確保ますこの方法です。

+0

それは魅力のように働いた!答えの束をありがとう! –

+0

聞いてうれしい。フィードバックをお寄せいただきありがとうございます :) –

関連する問題