AngularJs.$setPristine для сброса формы
Я изо всех сил пытался сбросить форму после отправки формы. Кто-то опубликовал это здесь который я хочу, чтобы он работал, но без успеха. Вот мой Мой Пример Кода.
$scope.form.$setPristine(); не Pristine: {{user_form.$pristine}} to правда. См. пример выше.
6 ответов:
$setPristine() был введен в 1.1.X ветвь angularjs. Вы должны использовать эту версию, а не 1.0.7 для того, чтобы он работал.
только для тех, кто хочет получить
$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