【问题标题】:Calculation logic within editable table row可编辑表格行内的计算逻辑
【发布时间】:2017-01-27 07:19:44
【问题描述】:

我有一张这样的桌子:

<tr class="data-row" ng-repeat="item in model.Invoice.InvoiceItemData">
        <td>
            <input type="text" name="itemServiceTitle" ng-model="item.ServiceTitle" />
        </td>
        <td>
            <input type="text" name="itemQuantity" ng-model="item.Quantity"/>
        </td>
        <td>
            <input type="text" name="itemPricePerDimension" ng-model="item.PricePerDimension" />
        </td>
        <td>
            <input type="text" name="itemDeliveryCost" ng-model="item.DeliveryCost" readonly="readonly" />
        </td> ...

我需要通过公式计算每个 itemDeliveryCost

item.DeliveryCost = item.Quantity * item.PricePerDimension

问题是 - 最好的方法是什么?请注意,item.Quantity 和 item.PricePerDimension 的 cahges 必须动态反映在 item.DeliveryCost 中。

【问题讨论】:

标签: angularjs editablegrid


【解决方案1】:

作为DeliveryCost = Quantity * Price,我建议每次更改数量价格时更新DeliveryCost。正是ng-change的用法:

<input type="text" ng-model="item.Quantity" ng-change="updateCost()"/>

<input type="text" ng-model="item.PricePerDimension" ng-change="updateCost()"/>

<input type="text" ng-model="item.DeliveryCost"/>

然后,在你的控制器中定义updateCost()函数:

$scope.updateCost = function() {
    $scope.item.DeliveryCost = $scope.item.Quantity * $scope.item.PricePerDimension;
}

【讨论】:

    【解决方案2】:

    在您的 api 成功调用中,您可以执行以下操作

    angular.forEach($scope.model.Invoice.InvoiceItemData, function (item) {
        item.DeliveryCost = item.Quantity * item.PricePerDimension;
    });
    

    您将在视图中获得计算值..

    如果你想在获取数据后改变值,那么上面的方法是行不通的,但是你需要调用一个方法来改变数量和维度的值,如下所示

      <input type="text" name="itemQuantity" ng-model="item.Quantity"  
         ng-blur="deliveryCostChanging(item)"/>
      <input type="text" name="itemPricePerDimension"   
        ng-model="item.PricePerDimension" ng-blur="deliveryCostChanging(item)"/>
    
    
    $scope.deliveryCostChanging = function(item){
         item.DeliveryCost = item.Quantity * item.PricePerDimension;
    };
    

    【讨论】:

    • 感谢您的回答,但当我更改 item.PricePerDimension 和 item.Quantity 的值时,此代码不起作用
    • 更新了答案您可以在输入上使用 ng-blur 或 ng-change 事件
    • 是的,这段代码可以工作,但这类似于我从 Angular 移动的 jquery 代码。我想知道是否有其他方法。像定义规则来定义模型本身的范围以及每当模型更改规则触发时。类似于您的第一个解决方案,但响应用户的行为。谢谢!
    • 是的,有一些方法可以做到这一点,但这种方法适用于较少的数据量。如果我找到更好的方法,我会在以后更新这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多