2

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!

7
  • $scope.currentRecord={}; sets that bound property back to an empty object. {} is an object literal. So currentRecord will be the object holding all of your form data. If you post more code it will be easier to help you. Commented Jun 8, 2015 at 9:17
  • But reset is not going to succeed using this!, Commented Jun 8, 2015 at 9:18
  • Is that all of your html form code? Commented Jun 8, 2015 at 9:35
  • Is there need to post Full HTML code? Commented Jun 8, 2015 at 9:37
  • Well the thing is, there is a JavaScript object bound to your form. This object is used in the ng-model, when you set currentRecord to a new object it probably won't work. What you need to do is set the individual properties of that object back to their defaults, then set the $setPristine ... Commented Jun 8, 2015 at 9:40

3 Answers 3

2

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 :)

Sign up to request clarification or add additional context in comments.

Comments

2

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

Comments

0

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();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.