AngularJS表单无法读取未定义的属性'$ setPristine'

时间:2015-07-15 14:55:02

标签: angularjs

我知道还有其他类似的问题,但是我已经全部阅读过,而且没有一个能为我工作。

当我尝试将我的表单设置为原始时,我不断收到此错误:
TypeError: Cannot read property '$setPristine' of undefined

控制器和我的角度版本(1.4.2)一切正常,因为我还在调用$setPristine();方法的同一函数中发生了其他事情并且正在运行。

这是我正在使用的代码:

HTML

<form name="cadTel" novalidate>
    <div class="form_group">
        <label class="col-md-4 f--label"><i class="fa fa-asterisk"></i>Nome</label>
        <div class="col-md-8 f--input">
            <input type="text" name="ds_contato" ng-model="tel.ds_contato" ng-required="true" />
        </div>
    </div>
    <div class="form_group">
        <label class="col-md-4 f--label"><i class="fa fa-asterisk"></i>Telefone</label>
        <div class="col-md-8 f--input">
            <input type="text" name="num_tel" mask="(99) 9?9999-9999" ng-model="tel.num_tel" ng-required="true" />
        </div>
    </div>
    <input type="button" class="bt-m bt-suc" name="cadastrar" value="Salvar" ng-click="add_telefone(tel)">
    <div class="bt-m bt-war" ng-click="reset()">Limpar</div>
</form>

app.js

$scope.tel = {};

$scope.add_telefone = function(tel) {
    $scope.tel = angular.copy(tel);
    $http({
        method: 'POST',
        url:'dist/php/db.php?action=add_telefone', 
        data:$scope.tel,
    })
    .success(function (data, status, headers, config) {
        $scope.reset();
    })
    .error(function (data, status, headers, config) {
    });
};
$scope.reset = function() {
    $scope.tel = {};
    $scope.cadTel.$setPristine();
};

清除值的选项正在运行,但设置原始无 有什么想法吗?

2 个答案:

答案 0 :(得分:19)

我遇到了同样的问题,下面的修正纠正了它。 Angular不知道表单id。请更改表格名称,如下所示

form name="form.cadTel"

同样在控制器启动期间设置表单

$scope.form = {};

检查此plnkr link

答案 1 :(得分:0)

我正在使用bootstrap模式来显示表单,当我单击“取消”或单击“模态”外部时,我想重置表单。我花了几个小时来解决AngularJS form Cannot read property '$setPristine' of undefined错误并通过在重置表单之前添加一个简单的条件来解决它:

$('#myform-modal').on('hidden.bs.modal', function () {
  resetModal();
});
resetModal = function() {
    if ( $scope.MyForm ) {
      $scope.MyForm.$setPristine();
      $scope.MyForm.$setUntouched();
      $scope.MyForm.$submitted = false;
      delete $scope.data;
    }
}