angularjs表单隐藏取消隐藏触发器验证
我有一个angularjs表单,设置了验证。我想在单击“显示”按钮时将其取消隐藏,在单击“隐藏”按钮时将其隐藏。 如果我玩输入字段并隐藏,然后再次取消隐藏,我仍然会看到我不想要的验证消息。请帮我解决这个问题 代码如下: Index.htmlangularjs表单隐藏取消隐藏触发器验证,angularjs,forms,validation,hide,Angularjs,Forms,Validation,Hide,我有一个angularjs表单,设置了验证。我想在单击“显示”按钮时将其取消隐藏,在单击“隐藏”按钮时将其隐藏。 如果我玩输入字段并隐藏,然后再次取消隐藏,我仍然会看到我不想要的验证消息。请帮我解决这个问题 代码如下: Index.html <!-- index.html --> <!DOCTYPE html> <html> <head> <!-- CSS ===================== --> <!-
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<!-- CSS ===================== -->
<!-- load bootstrap -->
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">
<style>
body { padding-top:30px; }
</style>
<!-- JS ===================== -->
<!-- load angular -->
<script src="http://code.angularjs.org/1.2.6/angular.js"></script>
<script src="script.js"></script>
</head>
<!-- apply angular app and controller to our body -->
<body ng-app="validationApp" ng-controller="mainController">
<div class="container">
<div class="col-sm-8 col-sm-offset-2">
<!-- PAGE HEADER -->
<div class="page-header"><h1>AngularJS Form Validation</h1></div>
<!-- FORM -->
<!-- pass in the variable if our form is valid or invalid -->
<button type="button" ng-click="unhide()" class="btn btn-primary">Show</button>
<form ng-show="showForm" name="userForm" ng-submit="submitForm(userForm.$valid)" novalidate> <!-- novalidate prevents HTML5 validation since we will be validating ourselves -->
<!-- NAME -->
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control" ng-model="name" required>
<p ng-show="userForm.name.$invalid && !userForm.name.$pristine" class="help-block">You name is required.</p>
</div>
<!-- USERNAME -->
<div class="form-group">
<label>Username</label>
<input type="text" name="username" class="form-control" ng-model="user.username" ng-minlength="3" ng-maxlength="8">
<p ng-show="userForm.username.$error.minlength" class="help-block">Username is too short.</p>
<p ng-show="userForm.username.$error.maxlength" class="help-block">Username is too long.</p>
</div>
<!-- EMAIL -->
<div class="form-group">
<label>Email</label>
<input type="email" name="email" class="form-control" ng-model="email">
<p ng-show="userForm.email.$invalid && !userForm.email.$pristine" class="help-block">Enter a valid email.</p>
</div>
<!-- SUBMIT BUTTON -->
<button type="submit" class="btn btn-primary">Submit</button>
<button type="button" ng-click="hide()" class="btn btn-primary">Hide</button>
</form>
</div><!-- col-sm-8 -->
</div><!-- /container -->
</body>
</html>
以下是plunker链接:
要实现预期的行为,您需要对代码进行几处更改
$scope.user={}
,然后将所有与用户相关的字段放在user
对象中,比如user.username
,user.name
和user.email
,这样在清除表单时,您就可以直接执行user={}
表单
对象,这里的表单对象将是表单
的名称,而用户表单
ng if
而不是ng show
。它将根据showForm
值添加和删除DOM
如果仍希望在字段中保留以前输入的数据,但只清除消息,则在提交表单时向作用域添加一个设置为true的变量。验证消息仅在变量为true时显示。然后,可以在隐藏时将其设置为false。这意味着当表单再次显示时,消息被隐藏
$scope.hide = function(){
$scope.showForm = false;
$scope.submitted = false;
}
普朗克:你好,潘卡吉。谢谢你的回答。这有助于解决我的问题。:)@PrashantKoli这不是我的答案上面一个是我的请勾选接受答案谢谢
$scope.hide = function(){
$scope.showForm = false;
$scope.submitted = false;
}