2016-03-25 1 views
1

Я хочу использовать функции $ setPristine() и $ setUntouched() в углах, чтобы очистить поля формы. Однако они, похоже, работают только с формами с именами. Что делать, если у меня есть форма без имени и только простая функция отправки?Как очистить форму в AngularJS, когда нет имени формы

Я прочитал документацию здесь: https://docs.angularjs.org/api/ng/type/form.FormController

Это не работает:

$scope.submit = function() { 

     // blah blah 

     // Resets the form fields to blank 
     // I could simply do 
     // $scope.field1 = ''; 
     // $scope.field2 = ''; 
     // But I want it to look cleaner 

     This.$setPristine(); 
     This.$setUntouched(); 

    }; 
+2

Вы видите какую-либо проблему при добавлении 'name' в вашу форму? Угловое будет создавать экземпляры FormController только для именованных форм, поскольку имя формы используется как свойство, представляющее экземпляр FormController для этой конкретной формы в вашей области. Без какого-либо имени он не сможет связать экземпляр FormController с любым именем свойства в области. – Arkantos

+0

А, спасибо, я вижу @Arkantos – OneMoreQuestion

ответ

1

Угловое создаст экземпляры FormController только для названных форм, так как имя формы u sed как свойство, представляющее экземпляр FormController для этой конкретной формы в вашей области. Без какого-либо имени он не сможет связать экземпляр FormController с любым именем свойства в области.

Например, учитывая следующую разметку

<div ng-controller="MyController"> 

    <form name="myForm" id="myForm" ng-submit="handleSubmit()"> 
     /* Some Markup */ 
    </form> 

</div> 

В вашем MyController, $scope имеет свойство myForm, представляющий экземпляр FormController, и вы можете вызывать методы или свойства доступа, как показано ниже.

$scope.myForm.$valid 
$scope.myForm.$setPristine(); 
$scope.myForm.$setUntouched(); 

Вызов setPristine() и setUntouched() изменится только форма государства от dirty до pristine и untouched, как видно из классов, добавленных в форму, но не обнуляют поля формы. Нет открытого метода, выставленного на FormController для сброса полей формы и соответствующих значений модели, но вы можете достичь этого просто с небольшим изменением способа привязки значений с помощью ng-model. Использование точки (.) В ваших моделях является хорошей практикой, так как позволяет захватить все состояние формы в одном объекте, а также не позволит вам создавать теневые свойства.

В вашем HTML,

<input type="text" id="fullName" name="fullname" ng-model="data.fullName"/> 
<input type="email" id="email" name="email" ng-model="data.email" /> 

В контроллере,

angular.module('MyApp', []) 
     .controller('MyController', function($scope) { 

    $scope.data = { 
    fullName : '', 
    email : '' 
    }; 


    $scope.resetForm = function(){ 
    /* reset the data to a new object so that all the properties 
    * of form are reset 
    */ 
    $scope.data = {}; 
    }; 

}); 

Вот пример Pen в действии. Надеюсь, это поможет :)

+0

спасибо, что я подозревал. Спасибо за разъяснения! – OneMoreQuestion

0

использовать "это" вместо "Это"

попробовать:

$scope.currentRecord={}; 
+0

Я прочитал сообщение, в котором вы его получили, я уже включил это в вопрос. Я ищу более чистое решение – OneMoreQuestion

+0

Это неплохое решение. Возможно, это единственное решение для вас: –

+0

, если вы не хотите использовать имена, я не знаю другого решения. –

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