Angularjs 在模型更新之前,ngForm无效
在我的应用程序中,我会在做一些事情之前检查表单是否有效。问题是ngForm在我使用它之前不会编译Angularjs 在模型更新之前,ngForm无效,angularjs,angularjs-ng-form,Angularjs,Angularjs Ng Form,在我的应用程序中,我会在做一些事情之前检查表单是否有效。问题是ngForm在我使用它之前不会编译模型 例如: JS $scope.results = []; $scope.$watch(function() { return $scope.testForm.$valid; }, function( valid ) { $scope.results.push( valid ); } ) HTML <ng-form name="testFo
模型
例如:
JS
$scope.results = [];
$scope.$watch(function() {
return $scope.testForm.$valid;
},
function( valid ) {
$scope.results.push( valid );
}
)
HTML
<ng-form name="testForm" ng-init="test = 1">
<input ng-model="test" required>
</ng-form>
<p ng-repeat="result in results track by $index" ng-class="{'false': !result, 'true': result}">{{ result }}</p>
表单一开始不应无效,因为
$scope.test
设置为1
有什么线索吗?不确定是否正确理解,但可能是AngularJS第一次检查时
$scope.results = [];
为空,因此在您将任何内容推入它之前,结果求值为false
如果以非空结果开始,请说:
$scope.results = [1];
第一个评价是真实的
我认为$watch不是合适的方法。我认为您的问题与$watch的工作方式以及角度的摘要周期有关。根据:
在向作用域注册观察程序后,异步调用侦听器fn
(通过$evalAsync
)以初始化观察程序。在极少数情况下,这是不可取的,因为在watchExpression
的结果没有更改时调用侦听器。要在侦听器中检测此场景,可以比较newVal
和oldVal
。如果这两个值相同(==),则由于初始化而调用了侦听器
使用检查忽略第一次调用(几乎总是)是有意义的:
$scope.$watch('testForm.$valid', function (newValue, oldValue) {
if (newValue === oldValue) { return; }
$scope.results.push(newValue);
});
另请参见,表单一开始不应该无效,因为
$scope.test
设置为1。好的,很抱歉我对$watch的评论,但正如ExpertSystem所说,第一次$digest传递错误从角度看是“正常”行为。
$scope.$watch('testForm.$valid', function (newValue, oldValue) {
if (newValue === oldValue) { return; }
$scope.results.push(newValue);
});