【问题标题】:Strange result using factory of angularjs使用angularjs工厂的奇怪结果
【发布时间】:2016-04-12 16:26:24
【问题描述】:
.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);

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

【问题讨论】:

  • getItem 是什么?
  • 您应该明白,您的工厂初始化代码将执行一次。因此,getNumber 将代表工厂初始化时的值。您应该导出函数以获取最新数据。
  • @vp_arth 怎么做?
  • @fikkatra 为此写了很好的答案。
  • 像this.getNumber = function(){ return i++; }一样简单,然后像cs.getNumber();一样使用

标签: javascript angularjs html local-storage


【解决方案1】:

CountingService.getNumber (getItem?) 是一个自调用函数 (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())

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2011-08-22
    • 2016-09-26
    相关资源
    最近更新 更多