我有一个表单需要在每次更改内容时保存数据。我在所有表单元素上使用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);
}
}
我的逻辑是否有问题,这是一个有效的错误,还是按预期工作?在最后一种情况下,我能做些什么来始终获得实际值?
答案 0 :(得分:2)
您需要延迟才能获得$scope.form
的更新值,因此可以使用$timeout
http://jsfiddle.net/loen22/w7dpx57f/
$scope.checkRadios = function(){
$timeout(function () {
console.log($scope.form.$valid);
});
}