Я относительно новичок в AngularJS, и я немного смутился.
Вот мой контроллер:
app.controller("calcController", function($scope) {
$scope.interests=[{time:'month',amount:0},
{time:'quarter',amount:0},
{time:'year',amount:0}];
$scope.rates=[{rate:0.01,lower:0,upper:1000,desc:'£0 - £1000'},
{rate:0.02,lower:1000,upper:5000,desc:'£1000 - £5000'},
{rate:0.03,lower:5000,upper:'none',desc:'£5000+'},];
$scope.balance=0;
$scope.updatedIntAmount=function(balance){
if(balance<0){
return 0;
}
else if(balance>=rates[1].lower && balance<rates[1].upper){
return balance*rates[1].rate;
}
else if(balance>=rates[2].lower && balance<rates[2].upper){
return balance*rates[2].rate;
}
else {
return balance*rates[3].rate;
}
}
});
То, что я хочу, - это способ привязать значение interests.amount
к updatedIntAmount
.
Вот мой HTML:
<div ng-controller="calcController" class="container">
<div class="form-group">
<label for="balInput">Balance:</label>
<input id="balInput" type="text" class="form-control" ng-model="balance">
</div>
<p ng-repeat="interest in interests">{{'per '+interest.time+':'+interest.amount}}</p>
</div>
Так что у меня есть interests.amount
зависящие от calculateIntAmount
, который, в свою очередь, зависит как от rates.rate
и от balance
. Как я могу изменить эти значения interests.amount
если balance
обновлен?
благодаря
Вы можете посмотреть, как использовать $scope.$watch
чтобы наблюдать за любыми изменениями в вашей balance
переменной, а затем обновлять ваши interests.amount
.
В вашем контроллере у вас будет:
$scope.$watch('balance', function(newBalance) {
$scope.interests.amount = $scope.updatedIntAmount(newBalance);
});
В вашем коде присутствует множество ошибок.
поскольку сначала нет ничего подобного ставкам [1], вместо этого вы должны изменить его на $ scope.rates [1].
Во-вторых: ваша функция updatedIntAmount содержит тарифы [3], которые снова неверны, поскольку у вас есть ставки [2] как максимальный предел в соответствии с правилом индекса массива.
Функция updateIntAmount возвращает одно значение, основанное на балансе. в этом случае после исправления ошибок просто добавьте:
{{updatedIntAmount(balance)}}
в вашем html-коде. он изменится сразу же после изменения баланса.
$scope.updatedIntAmount=function(balance){
if(balance<0){
return 0;
}
else if(balance>=$scope.rates[0].lower && balance<$scope.rates[0].upper){
return balance*$scope.rates[0].rate;
}
else if(balance>=$scope.rates[1].lower && balance<$scope.rates[1].upper){
return balance*$scope.rates[1].rate;
}
else {
return balance*$scope.rates[2].rate;
}
}
Попробуйте добавить ng-change
в свое поле ввода так: <input id="balInput" type="text" class="form-control" ng-model="balance" ng-change="updatedIntAmount(balance)">
. Это позволит вам вызвать функцию при изменении поля ввода и тем самым сделать все, что вы хотите, в функции контроллера.
Вы можете узнать больше на официальной странице документации AngularJS