2017-06-19 13 views
1

私は角度アプリに奇妙な問題があります。角度4は、* ngFor内の呼び出し関数でフリーズします

home.component.ts

と、このテンプレート:このコンポーネントを考える

home.component.html

ページではChromeは、最終的にタブを殺すために私を促しまで永遠にロードしようとします。

代わりgetDataForMonth(month)の私は単にmonthDataという名前home.component.tsにデータオブジェクトを持っているし、それはまた次のような場合には正常に動作します[data]"monthData"

を養う場合、それは正常に動作します:

  • 私はメソッドを持っていますhome.component.tshi() {}と記載されており、 と入力してから[data]hi()をhtmlにします。
  • hi() {return "hey";}と と記載されているhome.component.tsの方法があります。その後、[data]hi()のHTMLがフィードに含まれています。
  • hi(month) {return month;}と と記載されているhome.component.tsには、[data]hi(month)と記載されています。

getDataForMonth()についてはこれが壊れている可能性がありますか?ここで私は気づいていないいくつかの制限がありますか?それはgetDataForMonth()に関連しない何か別の問題かもしれませんか?

+0

なぜ関数がそれを使用しない場合、 'month'パラメータを持っていますか? –

+0

@MurhafSousliおっと、コードを間違ってコピーしました。私はそれを修正しましょう。 – NetherGranite

答えて

2

* * ngForは完全なオブジェクトを作成し、に渡し、レンダリングする前にこの

のように試すことができます。 console.logをgetDataForMonth()メソッドに追加して、angleがこの関数を呼び出す頻度を確認します。 良い方法は、毎月の関数結果を持つ配列を作成し、それを反復処理することです。

+0

機能とプロパティの違いは何ですか?どちらの場合も、変更検出ごとにチェックインされます。 – ng2user

+0

なぜそれがそれを壊すだろうか考えていますか? – NetherGranite

+1

@ ng2userプロパティ値を取得する方が、javascriptで関数呼び出しを呼び出すほうが安いです。関数には多くのオーバーヘッドがあり、たとえばコンテキストを作成します。これは10回の関数呼び出しでは重要ではありません。しかし、10000回の関数呼び出しでパフォーマンスの問題が発生します。 P.S.私の英語のために申し訳ありません – stjimmy54

0

「バインディングの関数を使用しないでください。あなたの関数は、すべての変更検出サイクル に呼び出されます。そして、角度DEVモードでX2サイクルを実行します」

は{{getDataForMonth()を使用しないことを意味}}それはあなたのパフォーマンスと間違ったコーディング方法を減らします。

あなたは機能は、パフォーマンスの理由* ngForに呼び出しを事前計算する必要がngFor

+0

機能とプロパティの違いは何ですか?どちらの場合も、変更検出ごとにチェックインされます。 – ng2user

関連する問題