我有一个angular应用程序,它有一个文本输入框,接受一个数字。这个盒子使用ng-model
绑定到packsToReplenish
。它还有一个ng-change
调用updateAllCalculations()
。这个想法是,当我在文本字段中输入一个数字,模型更新,然后updateAllCalculations
执行。问题是,据我所知,模型永远不会更新,而是保持在0,不管我在框中输入什么。
因此,我的console.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;
}
}
}
添加超时,例如100毫秒。帮助我。
$scope.updateAllCalculations = function(idx) {
$timeout(function() {
...
}, 100)
}
就像我们在工作中说的:'角的第一条规则-如果什么东西不起作用,把它包裹在一个对象中';名称空间有问题;
$scope.tmpData = {
packsToReplenish: 0,
samples: []
};