【问题标题】:How do I clear or reset data in a form in angularjs?如何在angularjs中清除或重置表单中的数据?
【发布时间】:2016-11-30 23:01:03
【问题描述】:

一直在寻找如何使用 angular 和 $setPristine 函数清除表单数据,但仍然没有结果总是给我一个错误,说 $setPristine 不是函数。谁能帮我解决一下?

这是我的 angular.controller

$scope.AddCustomer = function () {

            var CustDetails = {
                cname: $scope.CusDetails.cname,
                comname: $scope.CusDetails.comname,
                tel: $scope.CusDetails.tel,
                email: $scope.CusDetails.email

            };           

            CustService.Customer(CustDetails, function (res) {
                console.log(res);

                $.extend($.gritter.options, {
                    position: 'bottom-right',
                });

                if (res.data == 'success') {
                    $.gritter.add({

                        title: 'Success!',
                        text: 'Successfully added the new customer ' + '<h4><span class="label label-primary">' + CustDetails.cname + '</span></h4>',
                        time: '5000',
                        close_icon: 'l-arrows-remove s16',
                        icon: 'glyphicon glyphicon-ok-circle',
                        class_name: 'success-notice'
                    });

                    //CustDetails = {};

                    customerForm.$setPristine(true);
                }
                else {
                    $.gritter.add({
                        title: 'Failed!',
                        text: 'Failed to add a new customer',
                        time: '5000',
                        close_icon: 'l-arrows-remove s16',
                        icon: 'glyphicon glyphicon-remove-circle',
                        class_name: 'error-notice'
                    });
                }


            });          
        } 

这是 Html 代码

<div ng-controller="AddCustomerController">
    <div class="page-content-wrapper">
        <div class="page-content-inner">
            <div id="page-header" class="clearfix">
                <div class="page-header">
                    <h2>Add Customer</h2>
                    <span class="txt">Create and add new customer.</span>
                </div>
            </div>

           <!--Start .row-->
            <div class="row">
                <div class="col-md-1">
                </div>

                <div class="col-lg-9 col-sm-9 col-xs-12">
                    <!--col-lg-9 starts here-->
                    <div class="panel panel-default toggle panelMove panelClose panelRefresh">
                        <div class="panel-heading">
                            <h4 class="panel-title">Customer Details</h4>
                        </div>
                        <div class="panel-body pt0 pb0">
                            <form class="form-horizontal group-border stripped" id="customerForm">
                                <div class="form-group">
                                    <label class="col-lg-2 col-md-3 control-label">Customer Name</label>
                                    <div class="col-lg-10 col-md-9">
                                        <input type="text" required id="cname" ng-model="CusDetails.cname" class="form-control" name="cname" />
                                    </div>
                                </div>
                                <!--end of .form-group-->
                                <div class="form-group">
                                    <label class="col-lg-2 col-md-3 control-label">Company Name</label>
                                    <div class="col-lg-10 col-md-9">
                                        <input type="text" required id="comname" ng-model="CusDetails.comname" class="form-control" name="comname" />
                                    </div>
                                </div>
                                <!--end of .form-group-->
                                <div class="form-group">
                                    <label class="col-lg-2 col-md-3 control-label" for="">Telephone Number</label>
                                    <div class="col-lg-10 col-md-9">
                                        <div class="input-group input-icon">
                                            <span class="input-group-addon"><i class="fa fa-phone s16"></i></span>
                                            <input ng-model="CusDetails.tel" class="form-control" id="ctel" type="text" placeholder="(999) 999-9999">
                                        </div>
                                    </div>
                                </div>
                                <!-- End .form-group  -->
                                <div class="form-group">
                                    <label class="col-lg-2 col-md-3 control-label" for="">Email address</label>
                                    <div class="col-lg-10 col-md-9">
                                        <input id="email" ng-model="CusDetails.email" type="text" class="form-control" name="placeholder" placeholder="someone@example.com">
                                    </div>
                                </div>
                                <!-- End .form-group  -->
                            </form>
                        </div>
                    </div>
                    <!--End .panel-->
                </div>
                <!--.col-9 ends here-->
            </div>
            <!--End .row-->
            <!--Start .row-->
            <div class="row">
                <div class="col-md-1"></div>
                <div class="col-lg-9 col-sm-9 col-xs-12">
                    <button id="btnSubmit" type="submit" ng-click="AddCustomer()" class="btn btn-info pad"><span class="fa fa-user-plus"></span> Add Customer</button>
                    <button type="submit" class="btn btn-default pad">Cancel</button>
                </div>
            </div>
        </diV>
    </div>
</div>

【问题讨论】:

  • 能分享一下HTML代码吗?
  • @pdorgambide 添加了 html 代码。 :)

标签: javascript html angularjs forms


【解决方案1】:

您可以使用以下代码设置表单:

$scope.customerForm.$setPristine();
$scope.customerForm.$setUntouched();
$scope.CustDetails={};

【讨论】:

    【解决方案2】:

    您可以通过删除 ng-model 的值来删除表单字段值

    你的代码

    var CustDetails = {
                    cname: $scope.CusDetails.cname,
                    comname: $scope.CusDetails.comname,
                    tel: $scope.CusDetails.tel,
                    email: $scope.CusDetails.email
    
                }; 
    

    用这个替换

    $scope.CustDetails = {
                    cname: $scope.CusDetails.cname,
                    comname: $scope.CusDetails.comname,
                    tel: $scope.CusDetails.tel,
                    email: $scope.CusDetails.email
    
                }; 
    

    你的代码

    customerForm.$setPristine(true);
    

    用这个替换

    $scope.CustDetails={};
    

    【讨论】:

    • @AshaneAlvis 随时
    【解决方案3】:
    1. 使用 name attr 代替 id。 name="forName"
    2. Controller 中的表单引用将是$scope.formName

    【讨论】:

      【解决方案4】:

      使用:

      $scope.$destroy 
      

      因为它删除了与父范围关联的所有子范围,并将清除与其关联的所有数据。

      【讨论】:

        【解决方案5】:

        使用

        $scope.customerForm.$setPristine(true);
        

        给表格起一个名字,比如

        name= "CusDetails"
        

        那么问题就解决了。

        【讨论】:

        • Nope 然后它说 $scope.customerForm is undefined
        猜你喜欢
        • 2016-11-16
        • 1970-01-01
        • 2012-07-27
        • 2017-08-13
        • 2016-12-07
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        • 2019-04-20
        相关资源
        最近更新 更多