【问题标题】:ng-class when key in an object键入对象时的 ng-class
【发布时间】:2016-08-11 10:38:38
【问题描述】:

当我的产品在购物车中时,我想将 CSS 类应用于按钮。我尝试了一些类似的东西

<li class="add-to-cart">
  <button class="btn btn-add-cart" ng-click="cartCtrl.updateCart(product)" 
    ng-class="cartCtrl.cart[product.id] && 'active'">
    <i class="shopping-cart" aria-hidden="true"></i>
  </button>
</li>

<li class="add-to-cart">
  <button class="btn btn-add-cart" ng-click="cartCtrl.updateCart(product)" 
    ng-class="{active: cartCtrl.cart[product.id]}">
    <i class="shopping-cart" aria-hidden="true"></i>
  </button>
</li>

来自我的控制器的updateCart 函数片段:

function _updateCart(product) {
    if (ctrl.cart[product.id] == product.quantity) {
      // If a product with same quantity is getting added, remove it from cart
      delete ctrl.cart[product.id];
    } else {
      // add/update into cart
      ctrl.cart[product.id] = product.quantity;
    }
}

所以ctrl.cart 将产品 ID 作为键,将对应的数量作为值。如果产品 ID 在购物车中,cartCtrl.cart[product.id] 会给出数量。如果数量大于0,则应应用active类。

但它不起作用。它应该可以工作,因为最终我的expression 应该评估为真值或假值。喜欢ng-class="{active: 0}"ng-class="{active: 2}"

为什么它不起作用?

【问题讨论】:

  • 什么是购物车Ctrl.cart[product.id]
  • 请出示您的控制器
  • cartCtrl.cart 将产品作为键,将数量作为值
  • @Harry 添加了控制器代码
  • @Hussain,它应该可以工作,我建议你创建一个简单的演示来重现这个问题..

标签: angularjs ng-class


【解决方案1】:
function _updateCart(product) {
    if (ctrl.cart[product.id] == product.quantity) {
      // If a product with same quantity is getting added, remove it from cart
      var index = ctrl.cart.indexOf(product.id);
      ctrl.cart.splice(index, 1);
    } else {
      // add/update into cart
      ctrl.cart[product.product_sku] = product.quantity;
    }
  }

从上面的代码中,我发现了一个问题。您在插入数组时使用product.product_sku作为索引。但是您正在使用产品 ID 来检索。请在两者中使用相同的内容。

回答

我不知道购物车对象中的值是什么。如果你给它,它会很容易识别。

尝试如下

ng-class="cartCtrl.cart[product.id]!=null?'active':''"

--

<li class="add-to-cart">
  <button class="btn btn-add-cart" ng-click="cartCtrl.updateCart(product)" 
    ng-class="cartCtrl.cart[product.id]!=null?'active':''">
    <i class="shopping-cart"></i>
  </button>
</li>

【讨论】:

  • 您的解决方案有效,但我做错了什么。我已经从控制器添加了代码。请看
  • 解决方案有效,然后代码有效。对?您所做的就像在 ng-class 中为您分配了值,而不是检查条件。所以需要检查ng-class中的条件。不要使用 jquery 来显示或隐藏。在 Angular 中,有默认指令可以做到这一点。即 ng-if、ng-show、ng-hide。
  • 我的代码中有错字。删除它。看看吧。
  • 我知道指令。我再次用更多解释更新了我的问题。
猜你喜欢
  • 2014-07-03
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多