2015-08-25 6 views
2

У меня есть угловое приложение, которое имеет текстовое поле ввода, которое принимает число. Этот квадрат связан с использованием ng-model до packsToReplenish. Он также имеет ng-change, который вызывает updateAllCalculations(). Идея состоит в том, что когда я ввожу число в текстовое поле, модель обновляется, а затем выполняется updateAllCalculations. Проблема в том, насколько я могу сказать, что модель никогда не обновляется, а оставаясь на уровне 0, независимо от того, что я вхожу в поле.AngularJS: модель не обновляется на ng-change?

Из-за этого моя консоль.log всегда показывает 0 для вывода связанной модели, а затем логика выходит из строя из-за неточных данных. Может ли кто-нибудь сказать мне, как это исправить?

Вот соответствующие фрагменты кода:

HTML

<input type="number" class="form-control" ng-model="packsToReplenish" ng-change="updateAllCalculations()" required> 

JavaScript (в приложении и контроллер, конечно - просто опущен для экономии места)

$scope.packsToReplenish = 0; 
$scope.samples = []; //populated elsewhere 

$scope.updateAllCalculations = function() { 

    for (var i = 0; i < $scope.samples.length; i++) 
     $scope.updateCalculations(i); 
} 

$scope.updateCalculations = function(idx) { 
    console.log("Update Calculations " + idx + " - " + $scope.packsToReplenish); //always displays 0, and because of this the logic below doesnt execute properly 

    if ($scope.samples[idx].packages[0].openBox > 0) 
    { 
     if ($scope.samples[idx].packages[0].openBox >= $scope.packsToReplenish) 
     { 
      $scope.samples[idx].packages[0].maxUnitsToUse = $scope.packsToReplenish; 
      $scope.samples[idx].packages[0].newOpenBoxUnits = $scope.samples[idx].packages[0].openBox - $scope.packsToReplenish; 
     } 
     else 
     { 
      $scope.samples[idx].packages[0].maxUnitsToUse = $scope.samples[idx].packages[0].openBox; 
      $scope.samples[idx].packages[0].newOpenBoxUnits = 0; 
     } 
    } 
} 
+1

Проверьте http://jsfiddle.net/4b5pqr5u/1/. Он работает хорошо. Проверьте свой метод настройки $ scope.samples. Или вы можете сбросить 'packsToReplenish' где-то еще. – Joy

ответ

-1

Как мы говорим на моя работа: «Первое правило углового - если что-то не работает, оберните его в объект»; У вас есть проблемы с пространствами имен;

$scope.tmpData = { 
    packsToReplenish: 0, 
    samples: [] 
}; 

Это будет работать;

0

Добавить время ожидания, напр. 100 миллисекунд. Помог со мной.

$scope.updateAllCalculations = function(idx) { 
    $timeout(function() { 
     ... 
    }, 100) 
} 
Смежные вопросы