2015-07-15 14 views
8

Wiem, że są inne podobne pytania do tego, ale przeczytałem je wszystkie i żadne z nich nie działa dla mnie.

Kiedy próbuję ustawić moją formę na dziewiczy, wciąż otrzymuję ten błąd:
TypeError: Cannot read property '$setPristine' of undefined

Kontroler i moją wersję kątową (1.4.2) to wszystko w porządku, bo mam też inne rzeczy dzieje w tej samej funkcji wywołującej metodę $setPristine(); i ta działa.

Jest to kod używam:

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

Opcja do czyszczenia wartości są działa ale aby ustalić nieskazitelny żaden.
Wszelkie pomysły?

+2

W oparciu o to, co nam dałeś, wszystko działa. Zobacz ten [plunker] (http://plnkr.co/edit/TGIyQjp3lR9XviVuexAl?p=preview) – Tom

+0

@Tom Jakiś pomysł na to, co może się wydarzyć? Nawiasem mówiąc, dołączam do tego szablon z dyrektywą. – celsomtrindade

Odpowiedz

17

Napotkałem ten sam problem, a poniżej poprawiono go. Angular nie zna identyfikatora formularza. Proszę zmienić nazwę formularza poniżej

form name="form.cadTel" 

także podczas uruchamiania regulatora ustawić formę

$scope.form = {}; 

Sprawdź tę plnkr link.

+0

Dzięki za odpowiedź. Inną zmianą do zapamiętania jest funkcja resetująca '$ scope.form.cadTel. $ SetPristine();' – markau

0

Używam modemu bootstrap do wyświetlania formularzy, a kiedy klikam Anuluj lub kliknij poza modalem, chciałem zresetować formularz. Spędziłem godzin rozwiązywania AngularJS form Cannot read property '$setPristine' of undefined błąd i rozwiązać go poprzez dodanie prostego warunku przed resetowanie postać:

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

Powiązane problemy