Javascript 带函数/复杂表达式的角度绑定

Javascript 带函数/复杂表达式的角度绑定,javascript,ajax,angularjs,data-binding,ng-bind,Javascript,Ajax,Angularjs,Data Binding,Ng Bind,我有一个单页的Angular purchase表单,其中包含各种选项和一个显示在表单各个部分的运行估计总数。计算估算的内联总流量相当复杂,且难以测试: <span ng-bind="purchase.itemTotal + selectedInsurance() + selectedShipping()">?</span> if语句是必需的,因为它有时在通过Ajax填充模型$scope.purchase之前进行计算。问题在于,在Ajax GET完成之前,函数最初返回un

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

<span ng-bind="purchase.itemTotal + selectedInsurance() + selectedShipping()">?</span>
if
语句是必需的,因为它有时在通过Ajax填充模型
$scope.purchase
之前进行计算。问题在于,在Ajax GET完成之前,函数最初返回undefined,但随后
ngBind
不会再次对其进行重新计算


我可以告诉
ngBind
查看其他模型值吗?有没有另一种建议的方法来重构复杂的
ngBind
表达式,使其能够很好地进行脏检查?

这通常发生在您没有使用
$http
发出服务器请求时,因为$http负责在请求完成并执行回调后执行摘要周期

如果您使用的是
$ajax
,无论出于何种原因,您都不能使用
$http
,那么无论您在ajax回调中设置值的何处,您都必须将该代码包装在
$scope.$apply
方法中,该方法将在内部调用
$scope.$digest
方法来更新任何绑定或监视程序

例如


但ngBind不会再次对其进行重新评估
-->请检查控制台中是否存在任何错误。您正在使用$http for ajax,对吗?我正在使用它与Rails应用程序集成,这在后台使用了
$http
。此外,Ajax只是问题的一部分,因为它在用户更新时也不会重新评估,例如,
$scope.purchase.itemtottal
。我正在使用它与Rails应用程序集成,这在后台使用了
$http
。当我尝试在
$scope.$apply
中包装分配时,我得到一个错误“$digest已经在进行中”。而且,Ajax只是问题的一部分,因为它在用户更新时也不会重新评估,例如,
$scope.purchase.itemtall
。很抱歉,这个项目被搁置,所以我花了一段时间进行测试。当我以这种方式包装赋值时,结果是没有赋值,因为
$scope.$$phase
总是
“$digest”
。在任何情况下,我不仅仅是询问值何时通过AJAX更新;我还询问了它何时通过
ng model
通过用户输入进行更新,但它也不更新。
$scope.estimatedTotal = function() {
  if ($scope.purchase)
    return $scope.purchase.itemTotal + $scope.selectedInsurance() + $scope.selectedShipping();
}
if(!$scope.$$phase) {
  $scope.$apply(function () {
    $scope.purchase = //Set the purchase object/value
  });
}