Я понял, что $ setPristine должен это делать, но это не в моем проекте. Это моя форма:

form(name="new_project", ng-submit="create_project()")
    div.create_wrapper
        input#project_name(required, ng-model="project.name", type="text")
        select#project_language(required, ng-init="project.language='PHP'", ng-model="project.language", ng-options="language for language in languages")
        input.button.tiny.radius(type="submit", value="Create")

И js:

$scope.create_project = () ->
    project = new projectFactory this.project
    project.$save project, (form_data) ->
        $scope.projects.push form_data
        $scope.new_project.$setPristine()

Ошибок нет, и для pristine установлено значение true, но входное значение остается.

10
Joren 28 Дек 2013 в 03:32

2 ответа

Лучший ответ

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

Вам необходимо вручную очистить значения элементов формы.

Например, если у вас есть:

input#project_name(ng-model="project.name", type="text")

Чтобы очистить его, вы можете сделать:

$scope.project = null

В вашем контроллере.

19
Joren 3 Янв 2014 в 00:50

Вы можете использовать свой собственный метод, но с некоторыми улучшениями. Например, это ваша модель в контроллере:

    $scope.registrationForm = {
    'firstName'     : '',
    'lastName'      : ''
};

Ваш HTML:

<form class="form-horizontal" name="registrForm" role="form">
   <input type="text" class="form-control"
                       name="firstName"
                       id="firstName"
                       ng-model="registrationForm.firstName"
                       placeholder="First name"
                       required> First name
   <input type="text" class="form-control"
                       name="lastName"
                       id="lastName"
                       ng-model="registrationForm.lastName"
                       placeholder="Last name"
                       required> Last name
</form

Затем вы должны клонировать / сохранить ваше чистое состояние:

$scope.originForm = angular.copy($scope.registrationForm);

Ваша функция сброса будет:

$scope.resetForm = function(){
    $scope.registrationForm = angular.copy($scope.originForm); // Assign clear state to modified form 
    $scope.registrForm.$setPristine(); // this line will update status of your form, but will not clean your data, where `registrForm` - name of form.
};

Таким образом, вы можете очистить всю свою форму

0
Vladyslav Babenko 26 Дек 2014 в 17:07