2016-06-01 10 views
1

最近、AngulaJsのダイジェストとパフォーマンスの改善について勉強を始めました。私のウェブサイトでは、ng-ifトンを使用しています。ng-ifの代わりにdigestを保存するAngularJs

時々ng-ifに変更される可能性のある変数がありますが、コントローラの起動時に固定されて変更されないことがよくあります。

パフォーマンスを向上させるために、ダイジェストでループを評価しないようにするにはどうすればよいですか?ng-if?私は指令を変更する必要がありますか?ものによって?私のヘッダーテンプレートで

例えば

私は、ユーザーの特定のタイプによって見ることができるのdivを持っています。それは単なるdivなので、私はいくつかの異なるテンプレートを呼びたくはありません。 私が最初に評価すると、userIsSuperior()のリターン谷が(もちろん、このセッション中に)変わることはありませんが、私はAngularJsダイジェストは、すべてのループ、それを評価していることを知っている<div ng-if="userIsSuperior()"> ... </div>

を置きます。 どうすればこの問題を回避できますか?または私は何かを逃していますか?

+0

例を追加しました – charlietfl

+0

いくつかの具体例なしに答えるのは難しいです。私は本当に多くのものを持っています。コントローラの機能のほとんどは、いくつかの計算(ウェブサイトを上げれば本当に高価になるかもしれません)に基づいて真偽を返します。 –

+0

よくあることは、 'userIsSuperior()'のようなビューで関数を使うよりもスコープモデルのプロパティを設定するほうが良いということです。ダイジェスト中に不必要な関数呼び出しをたくさん保存します – charlietfl

答えて

2

あなたが探しているものはone-time bindingだと思います。

あなたが使用している場合:

<div ng-if="::userIsSuperior()"> ... </div> 

その後userIsSuperior()の値は一度しか計算され、その値に固執します。

demoを参照してください。

0

まず答えのソリューションは、AngularJS> 2.

を必要と私は一回結合のためOnceJS、ライブラリを使用して、有効な解決策を見つけました。

Here

関連する問題