在angularjs中,当选择框发生变化时,动态更新span内部的html

Update span inner html dynamically on select box change in angularjs

本文关键字:更新 动态 span 内部 html 变化 angularjs 选择      更新时间:2023-09-26

我在一个页面上有多个选择框,每个选择框都有一个列出其价格的span。在选择框中,根据项目动态更改价格更新。我如何使用angularjs实现这一点?

我的代码下面

<div ng-repeat="items in itemsList" class="col-md-3 col-sm-3 ">
    <div class="product product-category">
        <div class="details">
            <img src="resources/images/itemImages/{{items.image}}" style="width:159;height:159;" class="image" />
            <h4 class="name">{{items.name}}<span class="quality">(Quality)</span></h4>
            <h4 class="info">{{items.description}}</h4>
            <select id="unit{{items.id}}" ng-init="itemUnitsSelected = items.itemUnitPrices[0]" ng-model="itemUnitsSelected" ng-change="changedValue(itemUnitsSelected, '{{items.id}}')" data-ng-options="XYZ as XYZ.unit.name for XYZ in items.itemUnitPrices track by XYZ.id " class="form-control item-count">
            </select>
        </div>
        <div class="cart-feature">
            <h5 class="price">
              <span class="rate original"></span>
              <span class="rate  discounted" price="{{items.itemUnitPrices[0].itemPrice}}" id="discountedAmount{{items.id}}">Rs. {{items.itemUnitPrices[0].itemPrice}}</span>
              </h5>
            <div class="cart-option">
                <span class="tag">Qty </span>
                <span class="quantity">
                  <input type="text" value="1" id="qty{{items.id}}" class="form-control" />
                </span>
                <a href="javascript:return;" class="event" ng-click="addItemToCart(items.id,items.name)">
                    <span class="cart-btn"></span>
                </a>
            </div>
        </div>
    </div>
</div>

在我的控制器上,目前我正在通过javascript更新值,我想用angularjs来改变和绑定它。

 $scope.changedValue=function(item,itemId){
    document.getElementById("discountedAmount"+itemId).innerHTML = "Rs. "+item.itemPrice;
    document.getElementById("discountedAmount"+itemId).setAttribute("price", item.itemPrice);
 }; 

itemUnitsSelected应该通过将ng-model转换为item.itemUnitsSelected来限定ng-repeat的每个项目。您正在使用的ng-change指令不应该在其中有{{}}插值

<select id="unit{{items.id}}" 
  ng-init="item.itemUnitsSelected = items.itemUnitPrices[0]" 
  ng-model="itemUnitsSelected" 
  ng-change="changedValue(itemUnitsSelected, item.id)"
  data-ng-options="XYZ as XYZ.unit.name for XYZ in items.itemUnitPrices track by XYZ.id " 
  class="form-control item-count">
</select>

不要在控制器上做DOM操作,它被认为是坏的练习。

你也可以去掉ng-change事件,你只需要纠正你的span标签,在span标签中将items重命名为item

<span class="rate  discounted" 
  price="{{item.itemUnitPrices[0].itemPrice}}" 
  id="discountedAmount{{item.id}}">
      Rs. {{item.itemUnitPrices[0].itemPrice}}
</span>