使用angularjs工厂的奇怪结果

时间:2016-04-12 08:18:58

标签: javascript angularjs html5 local-storage

.factory("CountingService", function() {
  var i = 0;
    this.getNumber = (function() {
      return i += i + 1;

    })();

    return this;
  })

我有这项服务来更新我的购物车号码,但似乎没有获得最新的本地存储数据。因为我在我的控制器上测试了这个

console.log(CountingService.getNumber )甚至

$timeout(function(){

    console.log(CountingService.getNumber )

},1000);

我已经调试了好几个小时了。

1 个答案:

答案 0 :(得分: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())