Обновление значения в массиве с помощью функции - Angular JS

0

Я относительно новичок в 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 обновлен?

благодаря

  • 0
    Можете ли вы привести пример изменения баланса, который приведет к последующему изменению интереса.
  • 0
    Разве вы не можете сделать значения интересов. Равными некоторым вычислениям?
Теги:
arrays

3 ответа

0

Вы можете посмотреть, как использовать $scope.$watch чтобы наблюдать за любыми изменениями в вашей balance переменной, а затем обновлять ваши interests.amount.

В вашем контроллере у вас будет:

$scope.$watch('balance', function(newBalance) {
  $scope.interests.amount = $scope.updatedIntAmount(newBalance);
});
0

В вашем коде присутствует множество ошибок.

поскольку сначала нет ничего подобного ставкам [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;
 }
 }
0

Попробуйте добавить ng-change в свое поле ввода так: <input id="balInput" type="text" class="form-control" ng-model="balance" ng-change="updatedIntAmount(balance)">. Это позволит вам вызвать функцию при изменении поля ввода и тем самым сделать все, что вы хотите, в функции контроллера.

Вы можете узнать больше на официальной странице документации AngularJS

Ещё вопросы

Сообщество Overcoder
Наверх
Меню