ループごとに 1 回呼び出される高価な関数呼び出しがありますが、その戻り値をループ内で直接使用できる一時変数に設定したいと考えています。
これは を設定することで機能します{{ val=fn(...) }}
が、画面にも出力されます。値を出力せずにこれを行うことは可能ですか?
中括弧のセットを使用してみましたが、うまくいき{}
ません。
これを行う方法についてのアイデアはありますか?
ループごとに 1 回呼び出される高価な関数呼び出しがありますが、その戻り値をループ内で直接使用できる一時変数に設定したいと考えています。
これは を設定することで機能します{{ val=fn(...) }}
が、画面にも出力されます。値を出力せずにこれを行うことは可能ですか?
中括弧のセットを使用してみましたが、うまくいき{}
ません。
これを行う方法についてのアイデアはありますか?
一時変数の代わりに、値が必要なときにメソッドを呼び出します。このメソッドでは、キャッシュされたバージョンの結果を使用するか、キャッシュされたバージョンが null/未定義の場合は高価なメソッドを呼び出します。高価な関数は反復ごとに 1 回だけ呼び出され、不要な場合は呼び出されません。あなたが望まない限り、それは印刷されません。ng-repeat の反復ごとに新しいスコープが生成されるため、反復ごとに空のキャッシュが開始されます。
例えば:
$scope.cache = null
$scope.getValue = function() {
if (!this.cache) { // use typeof if 0 or false or empty string is valid!
this.cache = myExpensiveFunc()
}
return this.cache
}
反復のスコープごとに $scope.cache = null が初期化されることは 100% 確実ではありません。したがって、ビューでは、必要な場合にのみ getValue() を参照します。
チッ!
編集: コントローラーではなく、スコープでキャッシュします。
「フィルター」を調べたり、ビューの代わりに JS コードで作業を行ったりしましたか?