Angular 提交验证
Angular validation on submit
我正在尝试创建一个表单,如果您未填写任何字段,则在您点击提交时会显示一条警告消息。我正在尝试使用 angular 验证来实现这一点;但是,它根本不起作用。这是我目前拥有的代码:
(1) HTML 活动表格文件
function mainController($scope, $http) {
$scope.formData = {};
$http.get('/api/events')
.success(function(data) {
$scope.events = data;
initMap(data);
for(i = 0; i < data.length; i++){
console.log(data[i].eventLocation);
//placeMarker(data[i]);
//test(data);
}
//placeMarker(data);
})
.error(function(data) {
console.log('Error: ' + data);
});
// when submitting the add form, send the text to the node API
$scope.createEvent = function() {
$http.post('/api/events', $scope.formData)
.success(function(data) {
$scope.formData = {}; // clear the form so our user is ready to enter another
$scope.events = data;
console.log(data);
})
.error(function(data) {
console.log('Error: ' + data);
});
}
// ATTEMPT AT FORM VALIDATION
$scope.validateForm = function() {
if (document.getElementById("inputName").value == "" || document.getElementById("inputType").value == "" || document.getElementById("inputLocation").value == "" || document.getElementById("inputDetails").value == "") {
alert("Please fill in all required fields!");
return false;
}
}
};
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="col-lg-6">
<!-- Validate form -->
<form name="myForm" onsubmit="return validateForm()">
<div class="form-group">
<label>Event Name</label>
<input type="text" name="inputName" class="form-control" ng-model="formData.eventName" placeholder="Event name">
</div>
<div class="form-group">
<label>Type</label>
<select class="form-control" id="inputType" ng-model="formData.eventType">
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
<option>Option 4</option>
</select>
</div>
<div class="form-group">
<label>Location</label>
<select class="form-control" id="inputLocation" ng-model="formData.eventLocation">
<option>Location 1</option>
<option>Location 2</option>
<option>Location 3</option>
</select>
</div>
<div class="form-group">
<label>Event Details</label>
<textarea class="form-control" name="inputDetails" ng-model="formData.eventDetails" rows="2" placeholder="Add details about your event"></textarea>
</div>
<div class="text-center">
<button id="add-event"type="submit" class="btn btn-primary" ng-click="createEvent()">Submit</button>
</div>
</form>
做angularjs方式。 https://scotch.io/tutorials/angularjs-form-validation
angular.module('exApp', [])
.controller('ctrl', ['$scope', function($scope) {
$scope.save = function(invalid){
if(!invalid){console.log('Form Submitted');}
}
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body ng-app="exApp" ng-controller="ctrl">
<div>
<form name="form" class="css-form" novalidate>
<label>Name:
<input type="text" ng-model="name" name="userName" required="" />
</label>
<br />
<div ng-show="form.$submitted || form.userName.$touched">
<div ng-show="form.userName.$error.required">Tell us your name.</div>
</div>
<label>E-mail:
<input type="email" ng-model="email" name="userEmail" required="" />
</label>
<br />
<div ng-show="form.$submitted || form.userEmail.$touched">
<span ng-show="form.userEmail.$error.required">Tell us your email.</span>
<span ng-show="form.userEmail.$error.email">This is not a valid email.</span>
</div>
Gender:
<label><input type="radio" ng-model="gender" value="male" />male</label>
<label><input type="radio" ng-model="gender" value="female" />female</label>
<br />
<label>
<input type="checkbox" ng-model="agree" name="userAgree" required="" />
I agree:
</label>
<input ng-show="agree" type="text" ng-model="agreeMe" required="" />
<br />
<div ng-show="form.$submitted || form.userAgree.$touched">
<div ng-show="!agree || !agreeMe">Please agree and sign.</div>
</div>
<input type="button" value="Reset" />
<input type="submit" value="Save" ng-disabled="form.$invalid || form.$pristine" ng-click="save(form.$invalid)" />
</form>
</div>
您可以使用 ng-submit
进行表单验证
<form name="myForm" ng-submit="validateForm()">
并且为了验证使用 ng-model
变量来验证表单
$scope.validateForm = function() {
if (!$scope.formData.eventName || !$scope.formData.eventType ) {
alert("Please fill in all required fields!");
return false;
}
Angular 在使用表单时提供了一些帮助。它为表单提供不同的对象。他们在验证表单时非常有帮助:
- $pristine:true,如果用户尚未与表单交互
- $dirty:如果用户与表单进行了交互,则为真
- $valid:true,如果所有控件都有效
- $invalid:true,如果至少有一个控件无效
- $错误:它包含对所有无效控件的引用
您可以通过表单对象使用此对象,在您的例子中是 myForm。所以你可以检查用户是否填写了任何字段:
$scope.validateForm = function(myForm) {
if(myForm.$pristine) {
alert("Please fill in all required fields!");
}
}
试试这个:
- 将
ng-submit
添加到具有 myForm.$valid
条件的元素中。
- 在提交按钮上添加一个
ng-click="submitted=true"
事件,该事件将在单击提交按钮时触发。
- 在所有输入字段或必填字段中添加
required
属性。
演示版
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', function($scope) {
$scope.validateForm = function() {
alert("submitting");
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
<form name="myForm" ng-submit="myForm.$valid && validateForm()" novalidate>
<p ng-show="submitted==true && myForm.inputName.$invalid">Event name is missing.</p>
<p ng-show="submitted==true && myForm.inputType.$invalid">Event type is missing.</p>
<p ng-show="submitted==true && myForm.inputLocation.$invalid">Event Location is missing.</p>
<p ng-show="submitted==true && myForm.inputDetails.$invalid">Event details is missing.</p>
<div class="form-group">
<label>Event Name</label>
<input type="text" name="inputName" class="form-control" ng-model="formData.eventName" required placeholder="Event name">
</div>
<div class="form-group">
<label>Type</label>
<select class="form-control" name="inputType" id="inputType" ng-model="formData.eventType" required>
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
<option>Option 4</option>
</select>
</div>
<div class="form-group">
<label>Location</label>
<select class="form-control" name="inputLocation" id="inputLocation" ng-model="formData.eventLocation" required>
<option>Location 1</option>
<option>Location 2</option>
<option>Location 3</option>
</select>
</div>
<div class="form-group">
<label>Event Details</label>
<textarea class="form-control" name="inputDetails" ng-model="formData.eventDetails" rows="2" placeholder="Add details about your event" required></textarea>
</div>
<div class="text-center">
<button id="add-event"type="submit" class="btn btn-primary" ng-click="submitted=true">Submit</button>
</div>
</form>
</div>
我正在尝试创建一个表单,如果您未填写任何字段,则在您点击提交时会显示一条警告消息。我正在尝试使用 angular 验证来实现这一点;但是,它根本不起作用。这是我目前拥有的代码:
(1) HTML 活动表格文件
function mainController($scope, $http) {
$scope.formData = {};
$http.get('/api/events')
.success(function(data) {
$scope.events = data;
initMap(data);
for(i = 0; i < data.length; i++){
console.log(data[i].eventLocation);
//placeMarker(data[i]);
//test(data);
}
//placeMarker(data);
})
.error(function(data) {
console.log('Error: ' + data);
});
// when submitting the add form, send the text to the node API
$scope.createEvent = function() {
$http.post('/api/events', $scope.formData)
.success(function(data) {
$scope.formData = {}; // clear the form so our user is ready to enter another
$scope.events = data;
console.log(data);
})
.error(function(data) {
console.log('Error: ' + data);
});
}
// ATTEMPT AT FORM VALIDATION
$scope.validateForm = function() {
if (document.getElementById("inputName").value == "" || document.getElementById("inputType").value == "" || document.getElementById("inputLocation").value == "" || document.getElementById("inputDetails").value == "") {
alert("Please fill in all required fields!");
return false;
}
}
};
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="col-lg-6">
<!-- Validate form -->
<form name="myForm" onsubmit="return validateForm()">
<div class="form-group">
<label>Event Name</label>
<input type="text" name="inputName" class="form-control" ng-model="formData.eventName" placeholder="Event name">
</div>
<div class="form-group">
<label>Type</label>
<select class="form-control" id="inputType" ng-model="formData.eventType">
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
<option>Option 4</option>
</select>
</div>
<div class="form-group">
<label>Location</label>
<select class="form-control" id="inputLocation" ng-model="formData.eventLocation">
<option>Location 1</option>
<option>Location 2</option>
<option>Location 3</option>
</select>
</div>
<div class="form-group">
<label>Event Details</label>
<textarea class="form-control" name="inputDetails" ng-model="formData.eventDetails" rows="2" placeholder="Add details about your event"></textarea>
</div>
<div class="text-center">
<button id="add-event"type="submit" class="btn btn-primary" ng-click="createEvent()">Submit</button>
</div>
</form>
做angularjs方式。 https://scotch.io/tutorials/angularjs-form-validation
angular.module('exApp', [])
.controller('ctrl', ['$scope', function($scope) {
$scope.save = function(invalid){
if(!invalid){console.log('Form Submitted');}
}
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body ng-app="exApp" ng-controller="ctrl">
<div>
<form name="form" class="css-form" novalidate>
<label>Name:
<input type="text" ng-model="name" name="userName" required="" />
</label>
<br />
<div ng-show="form.$submitted || form.userName.$touched">
<div ng-show="form.userName.$error.required">Tell us your name.</div>
</div>
<label>E-mail:
<input type="email" ng-model="email" name="userEmail" required="" />
</label>
<br />
<div ng-show="form.$submitted || form.userEmail.$touched">
<span ng-show="form.userEmail.$error.required">Tell us your email.</span>
<span ng-show="form.userEmail.$error.email">This is not a valid email.</span>
</div>
Gender:
<label><input type="radio" ng-model="gender" value="male" />male</label>
<label><input type="radio" ng-model="gender" value="female" />female</label>
<br />
<label>
<input type="checkbox" ng-model="agree" name="userAgree" required="" />
I agree:
</label>
<input ng-show="agree" type="text" ng-model="agreeMe" required="" />
<br />
<div ng-show="form.$submitted || form.userAgree.$touched">
<div ng-show="!agree || !agreeMe">Please agree and sign.</div>
</div>
<input type="button" value="Reset" />
<input type="submit" value="Save" ng-disabled="form.$invalid || form.$pristine" ng-click="save(form.$invalid)" />
</form>
</div>
您可以使用 ng-submit
进行表单验证
<form name="myForm" ng-submit="validateForm()">
并且为了验证使用 ng-model
变量来验证表单
$scope.validateForm = function() {
if (!$scope.formData.eventName || !$scope.formData.eventType ) {
alert("Please fill in all required fields!");
return false;
}
Angular 在使用表单时提供了一些帮助。它为表单提供不同的对象。他们在验证表单时非常有帮助:
- $pristine:true,如果用户尚未与表单交互
- $dirty:如果用户与表单进行了交互,则为真
- $valid:true,如果所有控件都有效
- $invalid:true,如果至少有一个控件无效
- $错误:它包含对所有无效控件的引用
您可以通过表单对象使用此对象,在您的例子中是 myForm。所以你可以检查用户是否填写了任何字段:
$scope.validateForm = function(myForm) {
if(myForm.$pristine) {
alert("Please fill in all required fields!");
}
}
试试这个:
- 将
ng-submit
添加到具有myForm.$valid
条件的元素中。 - 在提交按钮上添加一个
ng-click="submitted=true"
事件,该事件将在单击提交按钮时触发。 - 在所有输入字段或必填字段中添加
required
属性。
演示版
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', function($scope) {
$scope.validateForm = function() {
alert("submitting");
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
<form name="myForm" ng-submit="myForm.$valid && validateForm()" novalidate>
<p ng-show="submitted==true && myForm.inputName.$invalid">Event name is missing.</p>
<p ng-show="submitted==true && myForm.inputType.$invalid">Event type is missing.</p>
<p ng-show="submitted==true && myForm.inputLocation.$invalid">Event Location is missing.</p>
<p ng-show="submitted==true && myForm.inputDetails.$invalid">Event details is missing.</p>
<div class="form-group">
<label>Event Name</label>
<input type="text" name="inputName" class="form-control" ng-model="formData.eventName" required placeholder="Event name">
</div>
<div class="form-group">
<label>Type</label>
<select class="form-control" name="inputType" id="inputType" ng-model="formData.eventType" required>
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
<option>Option 4</option>
</select>
</div>
<div class="form-group">
<label>Location</label>
<select class="form-control" name="inputLocation" id="inputLocation" ng-model="formData.eventLocation" required>
<option>Location 1</option>
<option>Location 2</option>
<option>Location 3</option>
</select>
</div>
<div class="form-group">
<label>Event Details</label>
<textarea class="form-control" name="inputDetails" ng-model="formData.eventDetails" rows="2" placeholder="Add details about your event" required></textarea>
</div>
<div class="text-center">
<button id="add-event"type="submit" class="btn btn-primary" ng-click="submitted=true">Submit</button>
</div>
</form>
</div>