Angularjs 更新值之前触发的ng更改

Angularjs 更新值之前触发的ng更改,angularjs,Angularjs,我有一个表单,每次更改时都需要保存数据。我在所有表单元素上使用了ng change,以触发表单验证和保存。但是,对于单选按钮,ng change在实际值更新之前被触发,因此在第一次尝试时会导致无效表单,在随后的所有时间都会导致过期表单 我已经建立了一个例子来说明这一点。控制台打印出表单是否有效。如果我要打印$scope.form.test.$modelValue的值,同样适用 // HTML <div ng-controller="MyCtrl"> <form name="

我有一个表单,每次更改时都需要保存数据。我在所有表单元素上使用了
ng change
,以触发表单验证和保存。但是,对于单选按钮,
ng change
在实际值更新之前被触发,因此在第一次尝试时会导致无效表单,在随后的所有时间都会导致过期表单

我已经建立了一个例子来说明这一点。控制台打印出表单是否有效。如果我要打印
$scope.form.test.$modelValue
的值,同样适用

// HTML
<div ng-controller="MyCtrl">
  <form name="form">
    <input type="radio" name="test" ng-model="test" value="yes" required ng-change="checkRadios()" /> Yes<br/>
    <input type="radio" name="test" ng-model="test" value="no" required ng-change="checkRadios()"/> No
  </form>
</div>

// JS
var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
        $scope.test = null;
    $scope.checkRadios = function(){
        console.log($scope.form.test.$modelValue);
    }
}
//HTML
是
不 //JS var myApp=angular.module('myApp',[]); 函数MyCtrl($scope){ $scope.test=null; $scope.checkRadios=函数(){ log($scope.form.test.$modelValue); } }

我的逻辑是错误的,这是一个有效的错误,还是它的工作预期?在最后一种情况下,如何始终获取实际值?

您需要延迟才能获取
$scope.form
的更新值,因此可以通过使用
$timeout
来实现


我通常避免在这样的情况下使用超时,因为它们看起来很粗糙,但不幸的是,我没有找到替代方法,所以我将继续并实现它。谢谢。实际上$timeout将回调排队,以便在下一个摘要周期运行,因此在当前摘要周期中执行
$scope.form
更新,这使得$timeout不那么麻烦:)
$scope.checkRadios = function(){
  $timeout(function () {
    console.log($scope.form.$valid);
  });
}