2015-07-15 14 views
8

So che ci sono altre domande simili a questo, ma ho letto tutto e nessuno di loro funziona per me.

Quando provo a impostare la mia forma ad un incontaminato, continuo a ricevere questo errore:
TypeError: Cannot read property '$setPristine' of undefined

Il controller e la mia versione angolare (1.4.2) sono tutto ok, perché ho anche altra cosa succede all'interno della stessa funzione chiamando il metodo $setPristine(); e quello sta funzionando.

Questo è il codice che sto usando:

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(); 
}; 

L'opzione per pulire i valori sono lavoro ma per impostare nessuno incontaminato.
Qualche idea?

+2

Sulla base di quello che ci hai dato, tutto funziona. Vedi questo [plunker] (http://plnkr.co/edit/TGIyQjp3lR9XviVuexAl?p=preview) – Tom

+0

@ Tom Qualche idea su cosa potrebbe accadere? A proposito, sto includendo il da un modello con una direttiva. – celsomtrindade

risposta

17

Ho affrontato lo stesso problema e sotto la correzione l'ho corretto. Angular non è a conoscenza dell'id del modulo. Si prega di cambiare il nome del modulo come di seguito

form name="form.cadTel" 

anche durante l'avvio del controller impostare il modulo

$scope.form = {}; 

Scegli questa plnkr link.

+0

Grazie per la risposta. L'altro cambiamento da notare è la funzione di reset '$ scope.form.cadTel. $ SetPristine();' – markau

0

Sto utilizzando modal bootstrap per mostrare i moduli e quando faccio clic su Annulla o faccio clic all'esterno del modal, volevo reimpostare il modulo. Ho passato ore la risoluzione dei problemi AngularJS form Cannot read property '$setPristine' of undefined di errore e risolto con l'aggiunta di una semplice condizione prima di resettare il modulo:

$('#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; 
 
    } 
 
}

Problemi correlati