Изменить модель при изменении входного значения внутри ng-repeat

У меня есть таблица, в которой я перечисляю некоторые продукты с некоторыми входными данными, в основном я хочу изменить входное значение при изменении другого, вот <tr>:

<tr ng-repeat="bought_product in vm.bought_products track by bought_product.id">
    <td>
        {{ bought_product.name }}
    </td>
    <td>
        <input type="number" class="form-control"
               min="1" max="1000" placeholder="#"
               ng-model="bought_product.quantity">
    </td>
    <td>
        <div class="input-group">
            <span class="input-group-addon">$</span>
            <!-- This is the input where I'll insert a price -->
            <input type="number" class="form-control no-spin"
                   min="1" max="1000" placeholder="#" ng-change="vm.calculateVatPrice(bought_product.price)"
                   ng-model="bought_product.price">
        </div>
    </td>
    <td>
        <div class="input-group">
            <span class="input-group-addon">$</span>
            <!-- This input will automatically be filled -->
            <input type="number" class="form-control no-spin"
                   min="1" max="1000" placeholder="#"
                   ng-model="bought_product.vat_price">
        </div>
    </td>
</tr>

person Jonathan Solorzano    schedule 07.01.2016    source источник
comment
Что вы имеете в виду, когда другой меняется?   -  person Shaohao    schedule 08.01.2016
comment
@ShaohaoLin Когда значения входа 1 изменяются, вычислите значение на входе 2.   -  person Jonathan Solorzano    schedule 08.01.2016
comment
Все, что вам нужно сделать, это заменить $scope.bought_product.vat_price на $scope.vm.calculateVatPrice(bought_product.price).   -  person Johannes Jander    schedule 08.01.2016
comment
@JohannesJander Не знаю, если вы не заметили, он находится внутри ng-repeat, поэтому bought_product.vat_price - это не простое значение, которое можно изменить с контроллера.   -  person Jonathan Solorzano    schedule 08.01.2016


Ответы (1)


Вам придется заменить свой

ng-change="vm.calculateVatPrice(bought_product.price)"

by

ng-change="vm.calculateVatPrice(bought_product)"

и внутри вашей функции vm.calculateVatPrice вам нужно будет рассчитать и установить vat_price следующим образом

calculateVatPrice = function (product) {
    product.vat_price = product.price * 1.18;
}

Конечно, вы должны заменить это своей реальной бизнес-логикой для расчета цены НДС.

Таким образом, хитрость заключается в том, чтобы передать ссылку на объект продукта и соответствующим образом обновить значение на месте.

person Patrick Kelleter    schedule 07.01.2016
comment
Пожалуйста, прочитайте внимательно, bought_product.vat_price находится внутри ng-repeat, это означает, что он недоступен с контроллера, как вы сказали... - person Jonathan Solorzano; 08.01.2016
comment
о, вы правы, я исправлю свой ответ. пожалуйста, удалите отрицательный голос, если это возможно после этого :) - person Patrick Kelleter; 08.01.2016