更新值之前触发的ng-change

时间:2016-03-24 15:01:41

标签: angularjs

我有一个表单需要在每次更改内容时保存数据。我在所有表单元素上使用ng-change来触发表单验证和保存。但是,如果是单选按钮,则会在更新实际值之前触发ng-change,从而导致第一次尝试时形式无效,以及随后的所有时间形式都过时。

我已经设置JSFiddle来说明这一点。控制台打印出表单是否有效。如果我要打印$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);
    }
}

我的逻辑是否有问题,这是一个有效的错误,还是按预期工作?在最后一种情况下,我能做些什么来始终获得实际值?

1 个答案:

答案 0 :(得分:2)

您需要延迟才能获得$scope.form的更新值,因此可以使用$timeout

来实现

http://jsfiddle.net/loen22/w7dpx57f/

$scope.checkRadios = function(){
  $timeout(function () {
    console.log($scope.form.$valid);
  });
}