【问题标题】:AngularJS local storage only last item storedAngularJS本地存储仅存储最后一项
【发布时间】:2015-12-24 03:34:07
【问题描述】:

我在 AngularJS 中存储到本地存储时遇到问题。我正在使用 Ionic Framework 开发电子商务移动应用程序并使用 ng-repeat 显示产品数据。每个 ion-item 都有产品详细信息和一个与 TodoController 中的 addItem() 关联的按钮。单击按钮时,产品数据将存储到本地存储中。然而,问题是,每当我点击一系列按钮时,只有最后一个按钮被点击的产品会存储在本地存储中,而上一个点击按钮的数据不会。

<a class="item item-thumbnail-left" href="#">
        <img ng-src={{product.featured_image.source}}>
        <div class="row">
            <div class="col">
                <h3><span ng-bind="product.ID"></span></h3>
                <h3><span ng-bind="product.title"></span></h3>
            </div>
        </div>
        <div class="row">
            <div class="col">
                <p>{{product.meta_fields.woo.currency_symbol}}{{product.meta_fields.woo.price}}</p>
            </div>
        </div>

        <div class="row">
            <div class="col">
                <p>Qty</p>              
                    <select ng-init="quantity = '1'" ng-model="quantity">
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                    </select>
                </div>
          <div class="col"></div>
         <div class="col" ng-controller="TodoController">
            <button ng-click="addItem(product.ID, product.title,none , product.meta_fields.woo.price,  quantity)">Add Me</button>
            </div>
       </div>
    </a>

控制器

.controller('TodoController', function($scope) {


  $scope.saved = localStorage.getItem('todos');
  $scope.todos = (localStorage.getItem('todos')!==null) ? JSON.parse($scope.saved) : [];
  localStorage.setItem('todos', JSON.stringify($scope.todos));


   $scope.addItem = function (id,item,size,price,quantity) {
        $scope.todos.push({id,item,size,price,quantity});
        localStorage.setItem('todos', JSON.stringify($scope.todos));
    }

})

【问题讨论】:

    标签: angularjs ionic-framework local-storage


    【解决方案1】:

    问题出在您的控制器中,您只在没有键的对象中传递值。你需要修改 $scope.addItem 函数

       $scope.addItem = function(id, item, size, price, quantity) {
        $scope.todos.push({
          id: id,
          item: item,
          size: size,
          price: price,
          quantity: quantity
        });
        localStorage.setItem('todos', JSON.stringify($scope.todos));
      }
    

    我还为你创建了一个 plunker 示例,看看http://plnkr.co/edit/3Uzj0Zz9TVYftjFyEGv4?p=preview

    【讨论】:

    • 酷!你确定这是导致问题的唯一原因吗?我刚刚将我的代码修改为您所说的内容,但仍然无法正常工作。不过,您的 plunker 正在提供绝对好的结果。
    • 不,很遗憾没有错误。可能是由于嵌套控制器吗?我正在使用单独的控制器从远程源和 TodoController 检索数据以存储到本地存储
    • 能否请您在 plunker 中编写完整的代码。可能是要换东西了。更新相同的 plunker
    【解决方案2】:

    确保本地存储中没有字符串“未定义”或未定义:

    $scope.todos = (localStorage.getItem('todos')!==null && 
                    localStorage.getItem('todos')!=='undefined') ? JSON.parse($scope.saved) : [];
    

    【讨论】:

    • 检查!不帮忙! :-(
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 2020-11-07
    • 2015-12-23
    • 2013-10-18
    • 2015-12-05
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多