javascript - 在 Angular JS 中提交后如何将表单重置为原始状态

标签 javascript angularjs

单击重置/发送按钮后,我还没有遇到最困难的时间将此表单重置为原始状态!我尝试过 angular.copy 方法 $scope.contactForm.$setPristine();无济于事。我收到一条错误,指出 $scope.contactForm.$setPristine();未定义。有人发现我的代码有问题吗!

这是我的 HTML

<!-- CONTACT FORM -->
<div class="sixteen columns contact-container">
    <h2>Contact Me</h2>
    <p class="required">* = Required</p>

    <div id="messages" data-ng-show="message">{{message}}</div>

    <form name="contactForm" id="contactForm" class="contact" method="post" novalidate>

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

        <label ng-class="{ 'has-error' : contactForm.email.$invalid && !contactForm.email.$pristine }">eMail*
            <input type="email" name="email" class="form-control" data-ng-model="userData.email" placeholder="joe84@email.com"     required>
            <p data-ng-show="contactForm.email.$invalid && !contactForm.email.$pristine" class="help-block">You email is required.    </p>
        </label>

        <label ng-class="{ 'has-error' : contactForm.comment.$invalid && !contactForm.comment.$pristine }">Comment*
            <textarea name="comment" class="form-control" ng-model="userData.comments" required></textarea>
            <p data-ng-show="contactForm.comment.$invalid && !contactForm.comment.$pristine" class="help-block">You comment is     required.</p>
        </label>

        <p>
            <button data-ng-click="reset()">Reset</button>
            <button type="submit" ng-click="processForm()">Submit</button>
        </p>
    </form>
</div>
<!-- END: CONTACT FORM -->

这是我的 Controller

 // 'use strict';
/* Controllers */
var myAppControllers = angular.module('myAppControllers', ['myServices']);

myAppControllers.controller('contactCtrl', ['$scope', '$http',
    function ($scope, $http, $compile) {
        console.log('contactCtrl');

        // Empty object to hold input info
        $scope.userData = {};

        // Process Form
        $scope.processForm = function () {
            $http({
                method: 'POST',
                url: 'send-mail.php',
                data: $.param($scope.userData),
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            })
                .success(function () {
                    $scope.userData = {};
                    alert('Message Sent');
                });
        }

        $scope.reset = function () {
            $scope.userData = {};
            console.log('Reset Clicked');
        }
    }
]); 

最佳答案

虽然这是一个老问题,因为迄今为止没有一个答案提供有效的解决方案,但我认为这样做会很有帮助,以使其他可能有相同问题的人受益。 (毕竟,这就是我来到这里的原因:-)

正如几个答案所示,为了将表单设置回 Angular 的原始概念,您必须在表单上调用 $setPristine():

$scope.contactForm.$setPristine();

您必须清除模型,以便 Angular 绑定(bind)将每个表单字段更新为空,或者像这里的OP一样,更新为其>提示横幅(也称为水印文本、幽灵文本或占位符文本):

$scope.userData = {};

通过将模型设置为空对象,则在 HTML 中访问的任何属性(例如此处的 userData.nameuserData.email)都将是未定义的并触发空/提示横幅渲染。

关于javascript - 在 Angular JS 中提交后如何将表单重置为原始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23119931/

相关文章:

angularjs - 无法在指令模板中使用指令 Controller 值

angularjs - 旋转移动设备时,Angular {{code}} 可见

javascript - Bootstrap Nav 菜单不会在切换时下拉父 div

在 bash 脚本中使用 cURL 的 Javascript 登录

javascript - 显示任何访问者最近访问过的 html 页面

javascript - 在模糊中屏蔽信用卡输入

jquery - Jquery 模态弹出窗口中的 Angularjs 范围

javascript - 当我指定 JSON 时, Node GET 请求返回 html?

javascript - 故意未完成通过 HTTP 加载的图像

javascript - 图形未显示