无法清除表格

时间:2015-12-24 07:04:50

标签: angularjs html5 angular-ngmodel angularjs-ng-model

我在点击提交按钮后尝试重置表单。我知道单独将表单设置为pristine不应该清除输入字段。我尝试通过将表单设置为pristine然后将null分配给所有输入字段来实现清除表单的各种建议。有没有更简洁的方法来实现它?

模板:

 <p>{{contactForm.$pristine}}</p>
    <div class="inBox">
        <form  name="contactForm" novalidate>

            <div class="form-group" ng-class="{ 'has-error' : contactForm.name.$invalid && !contactForm.name.$pristine }">
                <label>Name</label>
                <input type="text" ng-model="tabVm.name" class="form-control" name="name" required>
                <p ng-show="contactForm.name.$invalid && !contactForm.name.$pristine" class="help-block">You name is required.</p>
            </div>


            <div class="form-group" ng-class="{ 'has-error' : contactForm.email.$invalid && !contactForm.email.$pristine }">
                <label>Email</label>
                <input type="email" ng-model="tabVm.email" name="email" class="form-control" required>
                <p ng-show="contactForm.email.$invalid && !contactForm.email.$pristine" class="help-block">Enter a valid email.</p>
            </div>

            <div class="form-group">
                <label>Contact Number</label>
                <input type="tel" ng-model="tabVm.number" class="form-control">
            </div>

            <div class="form-group" ng-class="{ 'has-error' : contactForm.message.$invalid && !contactForm.message.$pristine }">
                <label>Message</label>
                <textarea type="text" rows="5" ng-model="tabVm.message" name="message" class="form-control textBox" required></textarea>
                <p ng-show="contactForm.message.$invalid && !contactForm.message.$pristine" class="help-block">Brief message is required.</p>
            </div>


        </form>
        <button type="submit" ng-click="sendMsg()" class="btn large-btn"
                ng-disabled="contactForm.message.$invalid || contactForm.name.$invalid||contactForm.email.$invalid " >Send</button>

    </div>

app.js

$scope.contactForm.$setPristine();

我也试过

 $scope.contactForm.$pristine=true;

它们似乎都不起作用。我使用角1.4.8。

谢谢。

3 个答案:

答案 0 :(得分:1)

您应该使用$setPristine(),然后重置ng-model对象。另请注意,您在<form>之外有提交按钮。

这是一个有效的JSFiddle(我只使用了一个输入)

  $scope.sendMsg = function() {
      $scope.contactForm.$setPristine();
      $scope.tabVm = {};
  }

您引用了controlForm,但您发布的html包含contactForm

答案 1 :(得分:1)

我终于通过进行以下更改来实现它:

<div class="container box col-lg-6" >
    <p>{{contactForm.$pristine}}</p>
    <p>name state: {{contactForm.name.$pristine}}</p>
    <div class="inBox">
        <form  name="contactForm" ng-submit="sendMsg(contactForm)" novalidate>

            <div class="form-group" ng-class="{ 'has-error' : contactForm.name.$invalid && !contactForm.name.$pristine }">
                <label>Name</label>
                <input type="text" ng-model="tabVm.name" class="form-control" name="name" required>
                <p ng-show="contactForm.name.$invalid && !contactForm.name.$pristine" class="help-block">You name is required.</p>
            </div>


           <input type="submit"  class="btn large-btn"
                    ng-disabled="contactForm.message.$invalid || contactForm.name.$invalid||contactForm.email.$invalid " >
        </form>
     </div>
</div>

和app.js:

$scope.sendMsg=function(form){
        if(form.$valid){
            console.log("Form is valid"); //this was a check I used to confirm that the controller recognized the form.
        }
           form.$setPristine();
            tabVm.name="";

        }

    }

我不清楚为什么这会起作用,或者我之前做错了什么。如果有人能解释,我将不胜感激。谢谢。

答案 2 :(得分:0)

执行以下操作

$scope.sendMsg = function(){
//your function code

$scope.tabVm={};
$scope.tabVm.name='';
$scope.tabVm.email='';
$scope.tabVm.number='';
$scope.tabVm.message='';
}