2017-01-27 4 views
1

У меня есть таблица вроде этого:Расчет логика в пределах редактируемой строки таблицы

<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

Вопрос: какой лучший подход для этого? Обратите внимание, что cahges для item.Quantity и item.PricePerDimension должны быть отражены в item.DeliveryCost динамически.

+0

ли вы посмотрите на [мой ответ] (HTTP: // StackOverflow. ком/а/41890735/4927984)? – Mistalis

ответ

1

Внутри вашего успеха апи позвонить вы можете сделать следующее

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

Вы получите расчетные значения в поле зрения ..

Если вы хотите изменить значения после получения данных, то выше подход не будет работать но для этого нужно вызвать метод изменения значения количества и Dimention как следующий

<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; 
}; 
+1

Спасибо за ваш ответ, но этот код не работает, когда я меняю значения для item.PricePerDimension и item.Quantity –

+0

Обновлен ответ Вы можете использовать события ng-blur или ng-change на входах – Rakeschand

+0

Да, этот код работает, но это похожий на код jquery, который я перехожу с углового. Я хотел бы узнать, есть ли другой подход. Что-то вроде определения правил для самой модели модели и при каждом изменении правил изменения модели. Что-то похожее на ваше первое решение, но оперативно реагирует на действия пользователя. Благодаря! –

2

как DeliveryCost = Quantity * Price, я хотел бы предложить к и pdate 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; 
}