Я знаю, что есть несколько старых вопросов со связанными темами, но я не нашел удовлетворительного ответа на этот вопрос, плюс эти ответы, похоже, для более старых версий Angularjs.
Моя проблема - это форма с угловой проверкой, и ng-submit не запускается после того, как она была отправлена один раз, даже после того, как данные модели были сброшены, а форма была нетронутой и установлена в нетронутую.
После первого представления форма сбрасывается визуально, как ожидалось, и корректно проверяется, если используется второй раз, включая активацию кнопки отправки при прохождении проверки. Сравнение кода формы перед любыми представлениями и после сброса создает идентичный HTML. Нажатие кнопки submit вызывает предварительный загрузчик, как было разработано. Однако действие ng-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;
});
};
Вы вызываете $scope.resetMediaData();
в вашем обработчике отправки, который уничтожает объект $scope.uploadMedia
включая вашу функцию отправки (и она не получает redeclared). Я просто переместил $scope.uploadMedia = {};
вне функции resetMediaData()
.