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

    })(); 

    return this; 
    }) 

我有這項服務來更新我的購物車號碼,但它似乎沒有得到最新的localstorage數據。因爲我測試了我的控制器這樣使用angularjs工廠的奇怪結果

console.log(CountingService.getNumber)甚至

$timeout(function(){ 

    console.log(CountingService.getNumber) 

},1000); 

我已經調試這幾個小時。

+0

什麼是'getItem'? – dfsq

+0

@dfsq修復了我的錯字 –

+0

您應該明白,您的工廠初始化代碼將執行一次。所以'getNumber'將代表工廠初始化時的值。你應該導出函數來獲取新的數據。 –

回答

2

CountingService.getNumbergetItem?)是自調功能(IIFE)。將此功能的結果分配到CountingService.getNumber。代碼首次執行時會發生這種情況。這就是爲什麼當您稍後更改localstorage並再次呼叫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

固定我的錯字大聲笑.. –