$ setPristine()不能用于角度1.4的表单重置

时间:2015-12-28 07:27:51

标签: angularjs

HTML:

<form name="ContactForm" novalidate >
    <div class="list">
      <label class="item item-input">
        <input type="text" placeholder="First Name" ng-model="contact.firstName" name="uFirstName" required="" autocomplete="off"/>
      </label>
        <br>
        <div ng-show="ContactForm.$submitted || ContactForm.uFirstName.$touched" ng-hide="hidespan">
        <span class="error" ng-show="ContactForm.uFirstName.$error.required">Tell us your First Name.</span>
        <span class="error" ng-show="ContactForm.uFirstName.$error.text">This is not a valid First Name.</span>
        </div> 
        </div>
    <button class="button button-block button-assertive" ng-click="ContactForm.$valid && contactReq(contact)">
      Submit
    </button> 
    </form>

JS

var defaultForm = {
        firstName : "",
        lastName : "",
        email : "",
        message : ""
    }

    $scope.contact = angular.copy(defaultForm);

    $scope.contactReq = function(contact){
        $scope.ContactForm.$setPristine();
        $scope.contact = angular.copy(defaultForm);
        console.log('empty');
    }

我正在使用AngularJS v1.4.3进行phonegap开发。我想在单击提交按钮后重置表单。但是,当我正在设置Pristine时,我收到以下错误:&#34;错误:错误:undefined不是对象(评估&#39; $ scope.ContactForm。$ setPristine&#39;)&#34 我试过很多相关的链接,但没有什么对我有用。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

ContactForm应该在范围内。 只是猜测:在调用setPristine()

之前,将默认表单的值复制到模型中

答案 1 :(得分:0)

我使用Safari 9.01时遇到了一个奇怪的问题。从我的登录页面切换到注册页面后,我的表单输入无法编辑。

所以我尝试使用$ setPristine()方法并遇到了同样的问题。我发现在重置函数中设置超时允许我访问表单。

你可以尝试:

    $scope.contactReq = function(contact){
        $timeout(function(){
            $scope.ContactForm.$setPristine();
            $scope.contact = angular.copy(defaultForm);
            console.log('empty');
        },10);
    }

如果不起作用,请尝试使用this.ContactForm.$setPristine();代替$scope.ContactForm.$setPristine();

我的问题最终成为我使用ui-router在我的观点之间切换的方式的问题。

祝你好运!