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);
});
}