我知道还有其他类似的问题,但是我已经阅读了全部,但没有一个对我有用。

当我尝试将表单设置为原始格式时,我不断收到此错误:TypeError: Cannot read property '$setPristine' of undefined
Controller 和我的 Angular 版本(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();
};

清除值的选项有效,但未设置任何原始值。
有任何想法吗?

最佳答案

我遇到了同样的问题,下面的修复程序对其进行了纠正。
Angular不知道表单ID。请按以下方式更改表格名称

form name="form.cadTel"

同样在 Controller 启动期间设置表格
$scope.form = {};

检查此plnkr link

10-06 04:19