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

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

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

72 голоса | спросил Pirzada 26 Maypm13 2013, 16:27:35

6 ответов


0

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

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

ответил Lucas Holt 26 Maypm13 2013, 17:51:16
0

Просто для тех, кто хочет получить $setPristine без необходимости обновления до v1.1.x, вот функция, которую я использовал для смоделируйте функцию $setPristine. Я неохотно использовал v1.1.5, потому что один из использованных компонентов AngularUI несовместим.

      var setPristine = function(form){
            if(form.$setPristine){//only supported from v1.1.x
                form.$setPristine();
            }else{

                /*
                 *Underscore looping form properties, you can use for loop too like:
                 *for(var i in form){ 
                 *  var input = form[i]; ...
                 */
                _.each(form, function (input)
                {
                    if (input.$dirty) {
                        input.$dirty = false;
                    }
                });
            }
        };

Обратите внимание, что он ТОЛЬКО очищает поля $dirty и помогает изменить условие «показать ошибку», например $scope.myForm.myField.$dirty && $scope.myForm.myField.$invalid.

Другие части объекта формы (например, классы css) все еще необходимо учитывать, но это решает мою проблему: скрыть сообщения об ошибках.

ответил David Lin 5 AM000000110000003731 2013, 11:45:37
0

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

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

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

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

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

ответил Flep 4 SunEurope/Moscow2016-12-04T15:13:41+03:00Europe/Moscow12bEurope/MoscowSun, 04 Dec 2016 15:13:41 +0300 2016, 15:13:41
0

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

Вид: -

<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();
};
ответил vineet 4 +03002016-10-04T09:51:26+03:00312016bEurope/MoscowTue, 04 Oct 2016 09:51:26 +0300 2016, 09:51:26
0

Ответ 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;
            }
        });
    }
};
ответил eupharis 21 SatEurope/Moscow2013-12-21T01:14:12+04:00Europe/Moscow12bEurope/MoscowSat, 21 Dec 2013 01:14:12 +0400 2013, 01:14:12
0

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

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

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

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

ответил Jean-Marie Galliot 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 18 Sep 2013 22:10:17 +0400 2013, 22:10:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132