How to reset form fields in angular js after form submit

8.3k views Asked by At

I am submitting form using angular js. I want to reset form fields after submit.

DEMO_ANGULAR JS

   $scope.addUser = function() 
    {
        $scope.errors = [];
        $scope.msgs = [];

        $scope.errors.splice(0, $scope.errors.length); // remove all error messages
        $scope.msgs.splice(0, $scope.msgs.length);

        $http.post("../admin/users/add_user", {'fname': $scope.fname, 'lname': $scope.lname, 'uname': $scope.uname,'gender': $scope.gender,'email': $scope.email,'mobile': $scope.mobile,'pass': $scope.pass}
        ).success(function(data, status, headers, config) {

            if (data.msg != '')
            {
                $scope.msgs.push(data.msg);
                $scope.get_users();
                $scope.form_add.$setPristine();
                $scope.currentRecord={};
            }
            else
            {
                $scope.errors.push(data.error);
            }
        }).error(function(data, status) { // called asynchronously if an error occurs
// or server returns response with an error status.
            $scope.errors.push(status);
        });
    }

And This is my view (HTML) form for add user:

<form name="form_add" method="post">
                     <ul>
                        <li style="color:red" ng-repeat="error in errors"> {{ error}} </li>
                    </ul>
                    <ul>
                        <li style="color:green" ng-repeat="msg in msgs"> {{ msg}} </li>
                    </ul>
                        <table class="table" cellspacing=10 cellpadding=10>
                        <tr>
                        <td>First Name: <input required type="text" ng-pattern="/[a-zA-Z]$/"  ng-model="fname"  name="fname" id="fname" value=""/><br/>
                        <span style="color:red" ng-show="form_add.fname.$dirty && form_add.fname.$invalid">
                                <span ng-show="form_add.fname.$error.required">First Name is required.</span>
                                <span ng-show="form_add.fname.$error.pattern">Invalid</span>
                        </span>
                        </td>
                        <td>Last Name: <input required type="text" ng-pattern="/[a-zA-Z]$/" ng-model="lname" name="lname" id="lname" value=""/><br/>
                        <span style="color:red" ng-show="form_add.lname.$dirty && form_add.lname.$invalid">
                                <span ng-show="form_add.lname.$error.required">Last Name is required.</span>
                                <span ng-show="form_add.lname.$error.pattern">Invalid</span>
                        </span>
                        </td>
                        <td>User Name: <input required type="text" ng-pattern="/^[a-zA-Z0-9]{6,15}$/"   ng-model="uname" name="uname" id="uname" value=""/><br/>
                        <span style="color:red" ng-show="form_add.uname.$dirty && form_add.uname.$invalid">
                                <span ng-show="form_add.uname.$error.required">User Name is required.</span>
                                <span ng-show="form_add.uname.$error.pattern">Invalid: Minimum 6 characters and maximum 15 characters</span>    
                        </span>
                        </td>
                        <td width="20%">Gender :<br/> <input type="radio"  ng-model="gender" name="gender" id="r1" value="m" checked />Male
                        &nbsp;&nbsp;<input type="radio"  ng-model="gender" name="gender" id="r2" value="f"/>Female</td>
                        </tr>
                        <tr>
                        <td>Email ID: <input type="text" required ng-pattern="/^[a-z]+[a-z0-9._]+@[a-z]+\.[a-z.]{2,5}$/"  ng-model="email" name="email" id="email" value=""/><br/>
                            <span style="color:red" ng-show="form_add.email.$dirty && form_add.email.$invalid">
                                <span ng-show="form_add.email.$error.required">Email is required.</span>
                                <span ng-show="form_add.email.$error.pattern">Invalid email address.</span>
                            </span>
                        </td>
                        <td>Mobile : <input type="text" required  ng-model="mobile" ng-pattern="/^[1-9]{1}[0-9]{9}$/"  name="mobile" id="mobile" value=""/><br/>
                        <span style="color:red" ng-show="form_add.mobile.$dirty && form_add.mobile.$invalid">
                                <span ng-show="form_add.mobile.$error.required">Mobile is required.</span>
                                <span ng-show="form_add.mobile.$error.pattern">10 digits required</span>
                        </span>
                        </td>
                        <td>Password : <input required type="password" ng-model="pass" name="pass" id="pass" value=""/>
                        <span style="color:red" ng-show="form_add.mobile.$dirty && form_add.mobile.$invalid">
                                <span ng-show="form_add.mobile.$error.required">Mobile is required.</span>
                                <span ng-show="form_add.mobile.$error.pattern">10 digits required</span>
                        </span>
                        </td>
                        <td><button type="button" class="btn btn-primary" ng-click='addUser();' ng-disabled="form_add.$invalid">Save</button></td>
                        </tr>

                        </table>

                    <br/>
                    </form>

How to reset form after submit, any changes in above code? And my issue is not solved yet!

3

There are 3 answers

0
VBMali On BEST ANSWER

Its Solved in this way: I have used this code to RESET:

$scope.fname='';
$scope.lname='';
$scope.uname='';
$scope.email='';
$scope.mobile='';
$scope.pass='';
$scope.form_add.$setPristine();
0
Nahid Bin Azhar On

you can try a base object for your model. See the example

<form action="">
    <label for="">Name</label>
    <input type="text" ng-model="user.model">
    <label for="">Email</label>
    <input type="text" ng-model="user.email">
    <label for="">Password</label>
    <input type="password" ng-model="user.password">
    <button type="submit">Submit</button>
</form>

for Angular

$scope.addUser = function() 
    {
$scope.errors = [];
        $scope.msgs = [];

         $http.post("your/desire/url", yourData)
         .success(function(data, status, headers, config) {

            if (data.msg != '')
            {
                //do something
                //reseting form
                $scope.user='';
            }
            else
            {
                $scope.errors.push(data.error);
            }
        }).error(function(data, status) { 
            $scope.errors.push(status);
        });

    }

After complete submitting the form you have to reset you model base object

$scope.user='';

I think it will work fine :)

0
Ashish_B On

You can rest your form this way:

Like you have a form as:

 <form novalidate class="css-form">
    Name: <input type="text" ng-model="user.name" required /><br />
    E-mail: <input type="email" ng-model="user.email" required /><br />
    Gender: <input type="radio" ng-model="user.gender" value="male" />male
    <input type="radio" ng-model="user.gender" value="female" />female<br />
    <input type="button" ng-click="reset()" value="Reset" />
    <input type="submit" ng-click="update(user)" value="Save" />
  </form>

So the code for your reset button would work like:

$scope.master = {};
if (form) {
   form.$setPristine();
   form.$setUntouched();
}
$scope.user = angular.copy($scope.master);

This is sure short going to work