2016-04-12 9 views
0
.factory("CountingService", function() { 
    var i = 0; 
    this.getNumber = (function() { 
     return i += i + 1; 

    })(); 

    return this; 
    }) 

私のカート番号を更新するこのサービスはありますが、最新のローカルストレージデータが得られないようです。私はこのanglejsの工場で奇妙な結果を得ました

console.log(CountingService.getNumber)あるいは

$timeout(function(){ 

    console.log(CountingService.getNumber) 

},1000); 

ように私のコントローラ上でそれをテストしたので、私は時間のためにこれをデバッグしました。

+0

と 'getItem'何ですか? – dfsq

+0

@dfsqは私の誤植を修正しました –

+0

工場初期化コードは一度実行されることを理解する必要があります。したがって、 'getNumber'は工場初期化時の値を表します。新しいデータを取得する機能を持たせるためには、関数をエクスポートする必要があります。 –

答えて

2

CountingService.getNumbergetItem?)は自己呼び出し機能(IIFE)です。この機能の結果をCountingService.getNumberに割り当てます。これは、コードが最初に実行されたときに発生します。そのため、後でローカルストレージを変更してgetNumberを再度呼び出すと、変更内容は表示されません。

.factory("CountingService", function() { 
    this.getNumber = function() { 
     if(localStorage.getItem('cart') != null){ 
      var cart = JSON.parse(localStorage.getItem('cart')); 
      var totalItem = 0; 
      for(var i=0;i<cart.length;i++){ 
      totalItem += cart[i].qty; 
      } 
      return totalItem; 
     } else{ 
     return 0; 
     } 
    }; 

    return this; 
    }) 

をし、このようにそれを使用します:これを試してみてください

console.log(CountingService.getNumber()) 
+0

私のタイプミスを修正しました。 –