0

我有一个单页的 Angular 购买表单,其中包含多种选项和一个显示在表单各个部分的运行估计总数。计算估计的总内联相当复杂且难以测试:

<span ng-bind="purchase.itemTotal + selectedInsurance() + selectedShipping()">?</span>

我试图通过重构为作用域上的一个函数来干燥我的观点,并指定ng-bind为这个函数:

$scope.estimatedTotal = function() {
  if ($scope.purchase)
    return $scope.purchase.itemTotal + $scope.selectedInsurance() + $scope.selectedShipping();
}

if语句是必要的,因为它有时会在$scope.purchase通过 Ajax 填充模型之前进行评估。问题是该函数最初在 Ajax GET 完成之前返回 undefined,但随后ngBind不再重新评估它。

我可以告诉我ngBind注意额外的模型值吗?是否有另一种推荐的方法来重构ngBind与脏检查配合得很好的复杂表达式?

4

1 回答 1

0

这主要发生在您不使用$http服务器请求时,因为一旦请求完成并执行回调,$http 会负责执行摘要循环。

如果您正在使用$ajax并且由于某种原因无法使用$http,那么无论您在 ajax 回调中设置值的任何位置,您都必须将该代码包装在$scope.$apply方法中,该方法将在内部调用$scope.$digest方法来更新任何绑定或观察者。

例如

if(!$scope.$$phase) {
  $scope.$apply(function () {
    $scope.purchase = //Set the purchase object/value
  });
}
于 2015-06-04T21:13:52.610 回答