2015-07-02 2 views
0

Я знаю, что есть несколько старых вопросов со связанными темами, но я не нашел удовлетворительного ответа на этот вопрос, плюс эти ответы, похоже, для более старых версий Angularjs.AngularJS 1.4.1 ng-submit не срабатывает после сброса формы

Моя проблема - это форма с угловым подтверждением и ng-submit не срабатывает после того, как она была отправлена ​​один раз, даже после сброса данных модели, и форма была нетронутой и установлена ​​в нетронутую.

После первого представления форма сбрасывается визуально, как ожидалось, и корректно проверяется, если используется второй раз, включая активацию кнопки отправки при прохождении проверки. Сравнение кода формы перед любыми представлениями и после сброса создает идентичный HTML. Нажатие кнопки submit вызывает предварительный загрузчик, как было разработано. Однако нг подать действие не будет срабатывать ...

$scope.resetMediaForm = function() { 

     $scope.uploadMedia = {}; 
     $scope.uploadMedia.from = '' 
     $scope.uploadMedia.message = '' 
     $scope.uploadMedia.file = null; 
     $scope.uploadMedia.fileType = ''; 
     $scope.uploadMedia.fileName = ''; 
     $scope.uploadMedia.done = false; 
     $scope.uploadMedia.error = ''; 

     if ($scope.mediaForm) { 
      $scope.mediaForm.$setUntouched(); 
      $scope.mediaForm.$setPristine(); 
      //$('form[name="'+$scope.mediaForm.$name+'"]')[0].reset(); 
     } 

    }; 

    $scope.resetMediaForm(); 

    $scope.uploadMedia.submit = function() { 

     var data = { 
       from: $scope.uploadMedia.from, 
       message: $scope.uploadMedia.message, 
       file: $scope.uploadMedia.file, 
       fileType: $scope.uploadMedia.fileType, 
       fileName: $scope.uploadMedia.fileName 
      }; 

     plotRemoteAPI.postMedia(data, function (data, status) { 
      if (status >= 200 && status < 300) { 
       if (data.success === true) { 
        $scope.resetMediaForm(); 
       } else { 
        $scope.uploadMedia.error = data.error; 
       } 
      } else { 
       $scope.uploadMedia.error = status; 
      } 
     }, function (data, status) { 
      $scope.uploadMedia.error = data.error; 
     }); 
    }; 

Plunkr: http://embed.plnkr.co/zO3lEqa7sfqYDvjHRnqa/preview

+0

Вы можете попытаться изменить тип кнопки отправить в 'button' и измените' нг-submit' в 'нг-click' вместо этого? – Icycool

+0

Эй, lcycool - Спасибо. Это все еще не работает во втором представлении, и, конечно, выражения, зависящие от $ представленных, больше не работают, например, показывают предварительный загрузчик и т. Д. – izk

+0

@izk Не могли бы вы создать plunkr того же самого? –

ответ

1

Вы звоните $scope.resetMediaData(); в вашем представить обработчик, который разрушает $scope.uploadMedia объект, включая ваши представить функцию (и это не получить redeclared). Я просто переехал $scope.uploadMedia = {}; за пределами функции resetMediaData().

http://plnkr.co/edit/OhRwsfnx3rX3gXZ2bilc?p=preview

+0

Damnit! Разумеется, функция отправки была уничтожена при сбросе данных. Отличная добыча. Спасибо! Я должен ждать 21 час, чтобы наградить вас щедростью ... – izk