2

最初のサンプル コードでは、すべて正常に動作します。ページ ルートが変更されるたびに、いくつかの条件 ( $timeout) を確認し、promise を解決します。

JSFiddle Var サンプルコード

2 番目のサンプルに移動var rulesFactoryするapp.factory('rulesFactory')と、1 回だけ動作します。

JSFiddle アプリ ファクトリのサンプル コード

キャッシュですか?コードの再利用性を向上させるためにこれを解決するにはどうすればよいですか?

4

1 に答える 1

7

あなたのコードはrulesFactory、サービス自体が初めてインスタンス化されたときに一度だけ実行されました。

最初の解決時にこれを行います。

  1. Angular は、「ru​​lesFactory」と呼ばれる注入するものを探していることを確認します
  2. Angular は rulesFactory というサービスを見つけます。まだ誰も rulesFactory を使用していないことを確認し、サービスをインスタンス化します。
  3. サービス rulesFactory がインスタンス化され、$timeout が実行され、promise が返されます。

2 回目の解決時にこれを行います。

  1. Angular は、「ru​​lesFactory」を探していることを確認します。rulesFactory は既に存在します!
  2. Angular は rulesFactory の既存のオブジェクトを取得するだけです。
  3. タイムアウトは以前から既に実行されており、同じ既に解決された promise が使用されます。

これを修正するには、rulesFactory がタイムアウトを再度実行する関数を返すようにします。必要なときはいつでも。

さらに、$timeout 自体が promise を返すため、$timeout を返すだけで済みます :-)

http://jsfiddle.net/JbTkp/4/

于 2013-05-21T18:52:24.910 に答える