javascript - 当属性为 0 或以下时从数组中删除对象 - Angular

标签 javascript angularjs angularjs-ng-repeat

我有一个 Controller ,可以让用户编辑对象。其中一部分会减少对象的属性——我的模型的数量。当模型的数量达到 0 或以下时,理想情况下我想删除整个对象。

HTML

<div ng-app='basket'>
  <div ng-controller='BasketController as basket'>
    <div class='product' ng-repeat='product in cart.products'>{{ product.name }} Count: {{ product.quantity }} <a ng-click='product.quantity = product.quantity - 1'>Remove</a></div>
  </div>
</div>

JS

(function(){
  var app = angular.module('basket', []);
  var cart;

  app.controller('BasketController', function($scope, $http){

    $scope.getTimes=function(n){
      return new Array(n);
    };
    $scope.cart = {};
    $scope.cart.products = [{
      'name':'item 1',
      'quantity':3
    },{
      'name':'item 2',
      'quantity':3
    },{
      'name':'item 3',
      'quantity':3
    }];
  });

})();

现场演示

http://codepen.io/EightArmsHQ/pen/bNBmXm

例如,在上面,如果您在第一个对象上一次又一次单击“删除”,当您达到 0 时,我只想拥有一个如下所示的数组:

    $scope.cart.products = [{
      'name':'item 2',
      'quantity':3
    },{
      'name':'item 3',
      'quantity':3
    }];

最佳答案

您可以编写一个删除方法来检查数量并将该项目从列表中删除。

在你的 Controller 中:-

$scope.remove = function(product){
  var products = $scope.cart.products;
  product.quantity -= 1;

  if(!product.quantity){
    /*Splice the object from the array based on the index*/
    products.splice(products.indexOf(product), 1);
  }
}

点击后只需将其称为:

<a ng-click='remove(product)'>Remove</a>

<强> Demo

关于javascript - 当属性为 0 或以下时从数组中删除对象 - Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27788966/

相关文章:

javascript - 跨 Angular 服务的全局变量?

javascript - 叠加效果适用于 Chrome 中的 iframe 但不适用于 IE11

javascript - 相关 PhoneGap、AngularJs、Ionic、Bootstrap、Jasmine、Grunt、Bower。

javascript - 选择不绑定(bind)数据ng-重复数据

javascript - 重复和插入指令

javascript - 将外部 html 加载到 JavaScript 中的字符串

javascript - 单击时带有图像和加载元素 ID 的按钮

javascript - Nightwatch.js - 获取元素的标题并稍后进行比较

多个图像上的 Javascript image.onload 仅适用于最后一个图像

css - AngularJS - 可扩展行不适用于 ng-repeat