2016-02-24 13 views
22

私の角型コンポーネントビューが数値値を星に変換するように初期化された後で、いくつかのjQueryコードを実行する必要があります。Angular2 ngAfterViewInitはいつ呼び出されますか?

私はngAfterViewInit機能のコードを入れて、私がそれをする必要が何をしていません。関数内にブレークポイントを設定し、ngAfterViewInit関数が呼び出されるまでに、コンポーネントのHTMLのほとんどがロードされていないことがわかりました。ロードされていないパーツは、* ngForディレクティブを使用して生成されます。

このディレクティブが動作する必要があるすべてのHTMLを生成した後、どのようにしてコードを実行できますか?

+0

を見てみましょう: http://stackoverflow.com/questions/15458609/execute-function-on-page-load – Belakorr

+0

意見: 'componentDidMount'がはるかに簡単な抽象化ですhttps://facebook.github.ioを/react/docs/component-specs.htmlこれは、子プロセスに対して呼び出された後にのみ呼び出されます。あなただけの運命は – basarat

答えて

16

ngAfterViewInit()は、コンポーネントのビューとその子ビューが作成された後に呼び出す必要があります。私はこれをテストし、子供のngAfterViewInit()が親のngAfterViewInit()の前に呼び出されていることを発見しました。

「コンポーネントのHTMLのほとんどがロードされていません」と言われると、「ロード済み」とはどういう意味ですか?子コンポーネントのテンプレート内のHTML、または他の手段でロード(または生成)されていますか?

このディレクティブが私が操作する必要があるすべてのHTMLを生成した後、どのようにしてコードを実行できますか?

これは、ディレクティブのコードを確認するために役立つだろう。ディレクティブがAngularテンプレートに含まれていないHTMLを何らかの形で生成する場合は、レンダリングが完了したときに親に通知するために、イベントを手動でトリガーする必要があります(出力プロパティを使用します)。またはsetTimeout()を使用することもできます(しかし、それは信頼できません)。

角型コンポーネントビューを初期化して数値の値を星に変換した後に、jQueryコードを実行する必要があります。あなたからこれらの数値を取得している

?それらがサーバーから動的にロードされる場合は、データが到着したときにイベントをトリガーし、その時点でビューを更新することができます。

また、なぜ入力プロパティとして番号を取り、NgForを使って星を生成するコンポーネントを作成していませんか?

19

準備中のDOMに依存している場合、ngAfterViewCheckedを使用しています。呼び出されるngAfterViewInitん

import {Component, AfterViewChecked} from '@angular/core'; 

export class Spreadsheet implements AfterViewChecked{ 

    ngAfterViewChecked(){ 

    } 
} 
+0

作品を使用してNgFor概念ではありません。 – baaroz

+13

は 'ngAfterViewChecked'が複数回呼び出すことができることを覚えておいてください準備がないのでngAfterViewInitは単に失敗した私のために簡単なJavaScriptを' [] .forEach' –

+1

テンプレートのngForにいくつかのHTML要素がロードされた後に実行するコードが必要なので、この方法でもやっています。少なくとも2つのフラグ(例えば、componentsInitialized、searchComponentsInitializedなど)を持っているので、ngAfterViewCheckedで一度しか対応するコードを実行しないようにしているので、明らかに最適な解決策ではありません。私は本当にこれを行う正しい方法が何だろうと思っています。 – Jort

関連する問題