Ответ 1
Вычисление происходит сразу же после того, как вычисляющий вызов связан в шаблоне, который отображает его результат при изменении quantity
.
Вместо этого вы можете попробовать следующий подход. Измените свою разметку на следующее:
<div ng-controller="myAppController" style="text-align:center">
<p style="font-size:28px;">Enter Quantity:
<input type="text" ng-model="quantity"/>
</p>
<button ng-click="calculateQuantity()">Calculate</button>
<h2>Total Cost: Rs.{{quantityResult}}</h2>
</div>
Затем обновите свой контроллер:
myAppModule.controller('myAppController', function($scope,calculateService) {
$scope.quantity=1;
$scope.quantityResult = 0;
$scope.calculateQuantity = function() {
$scope.quantityResult = calculateService.calculate($scope.quantity, 10);
};
});
Здесь приведен пример JSBin, демонстрирующий вышеуказанный подход.
Проблема с этим подходом - результат вычислений остается видимым со старым значением до щелчка кнопки. Чтобы решить эту проблему, вы можете скрыть результат всякий раз, когда изменяется quantity
.
Это потребует обновления шаблона для добавления на вход ng-change
и ng-if
результата:
<input type="text" ng-change="hideQuantityResult()" ng-model="quantity"/>
и
<h2 ng-if="showQuantityResult">Total Cost: Rs.{{quantityResult}}</h2>
В контроллере добавьте:
$scope.showQuantityResult = false;
$scope.calculateQuantity = function() {
$scope.quantityResult = calculateService.calculate($scope.quantity, 10);
$scope.showQuantityResult = true;
};
$scope.hideQuantityResult = function() {
$scope.showQuantityResult = false;
};
Эти обновления можно увидеть в этой демонстрации JSBin.