从变量中获取Undefined

时间:2016-03-31 06:33:13

标签: javascript angularjs ionic-framework

我有从服务中分配的变量,我需要来自变量值的实时计算器来填充另一个变量。

这是代码

$scope.getSubTotalSCTax = function(){
    TableService.checkOut('SubTotal',$scope.DetailMeja.finCheckInID)
    .then(function(response){
        console.log(response);
        $ionicLoading.hide();
        $scope.checkOut = {
            SubTotal:response.SubTotal,
            TaxPercentage:response.TaxPercentage,
            ServiceChargePercentage:response.SCPercentage,
        };
    }, function(err){
        console.log(err);
    })
};
$scope.getSubTotalSCTax();

$scope.checkOut.ServiceCharge = $scope.checkOut.SubTotal * $scope.checkOut.ServiceChargePercentage / 100;
$scope.checkOut.Tax = $scope.checkOut.SubTotal * $scope.checkOut.TaxPercentage / 100;

此行TypeError: Cannot read property 'SubTotal' of undefined

总是收到错误$scope.checkOut.ServiceCharge = $scope.checkOut.SubTotal * $scope.checkOut.ServiceChargePercentage / 100;

*编辑: 我的税率和服务费用百分比input type="text"。 每当税收百分比或服务费用百分比改变其值时,我需要重新计算

* EDIT2: 重新计算使用ng-change事件解决的问题,并调用运行re-Calculate函数

的函数

2 个答案:

答案 0 :(得分:0)

您需要考虑TableService.checkout异步运行的事实。在其余代码评估完毕之前,它不会调用then回调。

您可以通过返回承诺来解决此问题。

$scope.getSubTotalSCTax = function(){
  var promise = TableService.checkOut('SubTotal',$scope.DetailMeja.finCheckInID);

  promise.then(function(response){
    // ...
  });

  return promise;
};

然后在调用方法时将另一个then链接到promise上。

$scope.getSubTotalSCTax().then(function() {
  $scope.checkOut.ServiceCharge = $scope.checkOut.SubTotal * $scope.checkOut.ServiceChargePercentage / 100;
  $scope.checkOut.Tax = $scope.checkOut.SubTotal * $scope.checkOut.TaxPercentage / 100;
});

答案 1 :(得分:0)

scope.getSubTotalSCTax = function() {
    return TableService.checkOut('SubTotal', $scope.DetailMeja.finCheckInID)
};

$scope.getSubTotalSCTax().then(function(response) {
    console.log(response);
    $ionicLoading.hide();
    $scope.checkOut.ServiceCharge = response.SubTotal * response.SCPercentage / 100;
    $scope.checkOut.Tax = response.SubTotal * response.TaxPercentage / 100;

}, function(err) {
    console.log(err);
})