2015-12-24 2 views
4

Я пытаюсь сбросить форму после нажатия кнопки отправки. Я понимаю, что установка формы на нетронутую не должна очищать поля ввода. Я попытался реализовать различные предложения, чтобы очистить форму, установив форму в нетронутую, а затем присвоив значение null всем полям ввода. Есть ли более аккуратный способ его реализации?Не удается удалить форму

Шаблон:

<p>{{contactForm.$pristine}}</p> 
    <div class="inBox"> 
     <form name="contactForm" novalidate> 

      <div class="form-group" ng-class="{ 'has-error' : contactForm.name.$invalid && !contactForm.name.$pristine }"> 
       <label>Name</label> 
       <input type="text" ng-model="tabVm.name" class="form-control" name="name" required> 
       <p ng-show="contactForm.name.$invalid && !contactForm.name.$pristine" class="help-block">You name is required.</p> 
      </div> 


      <div class="form-group" ng-class="{ 'has-error' : contactForm.email.$invalid && !contactForm.email.$pristine }"> 
       <label>Email</label> 
       <input type="email" ng-model="tabVm.email" name="email" class="form-control" required> 
       <p ng-show="contactForm.email.$invalid && !contactForm.email.$pristine" class="help-block">Enter a valid email.</p> 
      </div> 

      <div class="form-group"> 
       <label>Contact Number</label> 
       <input type="tel" ng-model="tabVm.number" class="form-control"> 
      </div> 

      <div class="form-group" ng-class="{ 'has-error' : contactForm.message.$invalid && !contactForm.message.$pristine }"> 
       <label>Message</label> 
       <textarea type="text" rows="5" ng-model="tabVm.message" name="message" class="form-control textBox" required></textarea> 
       <p ng-show="contactForm.message.$invalid && !contactForm.message.$pristine" class="help-block">Brief message is required.</p> 
      </div> 


     </form> 
     <button type="submit" ng-click="sendMsg()" class="btn large-btn" 
       ng-disabled="contactForm.message.$invalid || contactForm.name.$invalid||contactForm.email.$invalid " >Send</button> 

    </div> 

app.js

$scope.contactForm.$setPristine(); 

и я также попытался

$scope.contactForm.$pristine=true; 

Ни один из них, кажется, работают. Я использую угловой 1.4.8.

спасибо.

+1

Вы пытались использовать оба эти параметра $ scope.controlForm. $ SetPristine(); 'и' $ scope.tabVm = {} '? – Amarnath

+0

Да, да. Я пробовал все комбинации ссылок и использовал setPristine. Из скрипки, которую опубликовал @Michelem, это несовместимость с моим кодом. В противном случае код должен работать нормально. – dpm

+0

Когда я пытаюсь напечатать значение contactForm на консоли, он дает неопределенный. Однако он должен [Объект HTML FormElement]. Форма находится внутри контроллера, потому что переменные tabVm.name и т. Д. Распознаются. – dpm

ответ

1

Я, наконец, получил его работу, внеся следующие изменения:

<div class="container box col-lg-6" > 
    <p>{{contactForm.$pristine}}</p> 
    <p>name state: {{contactForm.name.$pristine}}</p> 
    <div class="inBox"> 
     <form name="contactForm" ng-submit="sendMsg(contactForm)" novalidate> 

      <div class="form-group" ng-class="{ 'has-error' : contactForm.name.$invalid && !contactForm.name.$pristine }"> 
       <label>Name</label> 
       <input type="text" ng-model="tabVm.name" class="form-control" name="name" required> 
       <p ng-show="contactForm.name.$invalid && !contactForm.name.$pristine" class="help-block">You name is required.</p> 
      </div> 


      <input type="submit" class="btn large-btn" 
        ng-disabled="contactForm.message.$invalid || contactForm.name.$invalid||contactForm.email.$invalid " > 
     </form> 
    </div> 
</div> 

и app.js:

$scope.sendMsg=function(form){ 
     if(form.$valid){ 
      console.log("Form is valid"); //this was a check I used to confirm that the controller recognized the form. 
     } 
      form.$setPristine(); 
      tabVm.name=""; 

     } 

    } 

Я не ясно понять, почему это работает, или что я делаю неправильно раньше. Я был бы признателен, если бы кто-нибудь мог объяснить. Спасибо.

1

Вы должны использовать $setPristine(), а затем сбросить объект ng-model. Также обратите внимание, что у вас есть кнопка отправки за пределами <form>.

Это рабочий JSFiddle (я использовал только один вход, например)

$scope.sendMsg = function() { 
     $scope.contactForm.$setPristine(); 
     $scope.tabVm = {}; 
    } 

Вы ссылаетесь controlForm, но HTML вы вывесили есть contactForm

+0

TypeError: Не удается прочитать свойство 'contactForm' неопределенного; Я получаю эту ошибку, когда добавляю этот код в свой sendMsg(). Также, извините за форму управления в сообщении. Я использовал contactForm в своем коде. – dpm

+0

Вы перемещали кнопку отправки внутри элемента

"? –

+0

Да, я переместил кнопку в теге формы. – dpm

0

Выполните следующие действия

$scope.sendMsg = function(){ 
//your function code 

$scope.tabVm={}; 
$scope.tabVm.name=''; 
$scope.tabVm.email=''; 
$scope.tabVm.number=''; 
$scope.tabVm.message=''; 
} 
+0

TypeError: Невозможно установить свойство 'tabVm' неопределенного; Это ошибка после того, как я последовал за вами предложением. – dpm

+0

См. Мой пересмотренный ответ. поскольку мы определяем пустой объект, он дает ошибку, если вы добавляете значение свойства для того же объекта. – Dhiraj

+0

Он по-прежнему представляет ту же ошибку. Кроме того, сброс значения индивидуального свойства очищает форму, но не сбрасывает сообщения для проверки. – dpm

Смежные вопросы