如何使用 Angular 中通过 ng-model 预填充的字段执行表单验证
How to perform form validation with fields that are pre-populated via ng-model in Angular
假设我有一个包含必填字段的表单。我通过 ng-model 使用来自我的控制器的数据预填充这些字段。在此表单的提交按钮上,有一个 ng-disabled 属性 检查 $invalid,如下所示:
<button ng-click="next()" ng-disabled="form.is.$invalid">Next</button>
我 运行 遇到的问题是,当页面最初加载时,按钮被禁用并且不会检查字段的有效性,除非我返回并手动删除每个字段并重新键入他们的价值观。
我想知道如何在页面加载时检查此有效性,以便如果我通过 ng-model 将一些数据加载到字段中,它仍会将必填字段识别为有效。
谢谢。
我认为需要在此处添加更多示例代码,因为我相信您想要做的是直接使用 angular。在上面的代码片段中,您是否真的将表单命名为 "form",例如……?您需要为表格命名,以便它可以被引用。此外,如果您正在检查整个表单的有效性,假设您为表单命名,我认为以下应该有效:
<form name="userForm" novalidate ng-controller="userController">
<input name="firstname" ng-model="user.firstname" required/>
<input name="lastname" ng-model="user.lastname" required/>
<button ng-click="next()" ng-disabled="userForm.$invalid">Next</button>
</form>
而javascript代码是这样的:
var app = angular.module("userApp", [])
.controller("userController", function($scope) {
var user = {
firstname: "Willy",
lastname: "Nilly"
}
$scope.user = user;
$scope.next = function() {
console.log("next")
}
});
这里有一个link对应的plunker是你要找的吗?
或者,您是否遇到了从远程调用加载数据的问题,并且在解决 promise 时按钮未启用?如果这不是您要查找的内容,请说明。
我找到了这个问题的答案。我最终重写了表单以检查按钮单击时的验证(而不是使用 ng-disabled。)
单击按钮时,将检查字段并通过 ng-show 显示错误消息。在控制器中,检查 form.$error 中的属性。如果向此对象添加了错误,则存在错误。逻辑如下所示:
$scope.buttonClick = function () {
var obj = $scope.form.$error, hasErrors = false, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
hasErrors = true;
}
}
if (!hasErrors) {
// proceed
}
};
假设我有一个包含必填字段的表单。我通过 ng-model 使用来自我的控制器的数据预填充这些字段。在此表单的提交按钮上,有一个 ng-disabled 属性 检查 $invalid,如下所示:
<button ng-click="next()" ng-disabled="form.is.$invalid">Next</button>
我 运行 遇到的问题是,当页面最初加载时,按钮被禁用并且不会检查字段的有效性,除非我返回并手动删除每个字段并重新键入他们的价值观。
我想知道如何在页面加载时检查此有效性,以便如果我通过 ng-model 将一些数据加载到字段中,它仍会将必填字段识别为有效。
谢谢。
我认为需要在此处添加更多示例代码,因为我相信您想要做的是直接使用 angular。在上面的代码片段中,您是否真的将表单命名为 "form",例如……?您需要为表格命名,以便它可以被引用。此外,如果您正在检查整个表单的有效性,假设您为表单命名,我认为以下应该有效:
<form name="userForm" novalidate ng-controller="userController">
<input name="firstname" ng-model="user.firstname" required/>
<input name="lastname" ng-model="user.lastname" required/>
<button ng-click="next()" ng-disabled="userForm.$invalid">Next</button>
</form>
而javascript代码是这样的:
var app = angular.module("userApp", [])
.controller("userController", function($scope) {
var user = {
firstname: "Willy",
lastname: "Nilly"
}
$scope.user = user;
$scope.next = function() {
console.log("next")
}
});
这里有一个link对应的plunker是你要找的吗?
或者,您是否遇到了从远程调用加载数据的问题,并且在解决 promise 时按钮未启用?如果这不是您要查找的内容,请说明。
我找到了这个问题的答案。我最终重写了表单以检查按钮单击时的验证(而不是使用 ng-disabled。)
单击按钮时,将检查字段并通过 ng-show 显示错误消息。在控制器中,检查 form.$error 中的属性。如果向此对象添加了错误,则存在错误。逻辑如下所示:
$scope.buttonClick = function () {
var obj = $scope.form.$error, hasErrors = false, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
hasErrors = true;
}
}
if (!hasErrors) {
// proceed
}
};