AngularJs.$setPristine для сброса формы



Я изо всех сил пытался сбросить форму после отправки формы. Кто-то опубликовал это здесь который я хочу, чтобы он работал, но без успеха. Вот мой Мой Пример Кода.



$scope.form.$setPristine(); не Pristine: {{user_form.$pristine}} to правда. См. пример выше.

573   6  

6 ответов:

$setPristine() был введен в 1.1.X ветвь angularjs. Вы должны использовать эту версию, а не 1.0.7 для того, чтобы он работал.

см.http://plnkr.co/edit/815Bml?p=preview

только для тех, кто хочет получить $setPristine без необходимости обновления до версии 1.1.x, вот функция, которую я использовал для моделирования

была аналогичная проблема, когда мне пришлось установить форму обратно в нетронутое состояние, но также и нетронутое, так как $invalid и $error использовались для отображения сообщений об ошибках. Только с помощью setPristine() не было достаточно, чтобы очистить сообщения об ошибках.

Я решил ее с помощью setPristine() и setUntouched(). (См. документацию Angular:https://docs.angularjs.org/api/ng/type/ngModel.NgModelController)

Итак, в моем контроллере, я используется:

$scope.form.setPristine(); 
$scope.form.setUntouched();

эти две функции сбрасывают полную форму до $pristine и обратно до $untouched, чтобы все сообщения об ошибках были очищены.

есть еще один способ нетронутой форма то есть путем отправки формы в контроллер. Например:-

в виде:-

<form name="myForm" ng-submit="addUser(myForm)" novalidate>
    <input type="text" ng-mode="user.name"/>
     <span style="color:red" ng-show="myForm.name.$dirty && myForm.name.$invalid">
      <span ng-show="myForm.name.$error.required">Name is required.</span>
    </span>

    <button ng-disabled="myForm.$invalid">Add User</button>
</form>

В Контроллере:-

$scope.addUser = function(myForm) {
       myForm.$setPristine();
};

ответ DavidLn хорошо работал для меня в прошлом. Но он не захватывает всю функциональность setPristine, которая на этот раз меня споткнулась. Вот более полная прокладка:

var form_set_pristine = function(form){
    // 2013-12-20 DF TODO: remove this function on Angular 1.1.x+ upgrade
    // function is included natively

    if(form.$setPristine){
        form.$setPristine();
    } else {
        form.$pristine = true;
        form.$dirty = false;
        angular.forEach(form, function (input, key) {
            if (input.$pristine)
                input.$pristine = true;
            if (input.$dirty) {
                input.$dirty = false;
            }
        });
    }
};

Я решил ту же проблему, что и сброс формы в ее первозданном состоянии в угловой версии 1.0.7 (без метода $setPristine)

в моем случае использования форма после заполнения и отправки должна исчезнуть до тех пор, пока она снова не понадобится для заполнения другой записи. Поэтому я сделал эффект show/hide с помощью ng-switch вместо ng-show. Как я и подозревал, с помощью ng-switch поддерево формы DOM полностью удаляется и позже воссоздается. Таким образом, первозданное состояние автоматически восстановленный.

Мне это нравится, потому что это просто и чисто, но это не может быть пригодным для любого случая использования.

Это также может означать некоторые проблемы с производительностью для больших форм (?) В моей ситуации я еще не сталкивался с этой проблемой.

Comments

    Ничего не найдено.