Поле ввода Angularjs, которое не вызывает проверку формы [дубликат]

Краткий ответ: ваш метод foo() возвращается немедленно, а вызов $ajax() выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.

В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo() и сохранить результаты в члене этого объекта после завершения асинхронного вызова.

function foo(result) {
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;   // Store the async result
        }
    });
}

var result = { response: null };   // Object to hold the async result
foo(result);                       // Returns before the async completes

Обратите внимание, что вызов foo() ] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response.

2
задан Shohel 24 March 2015 в 05:50
поделиться

1 ответ

Переопределить метод $setDirty, определенный в ngModelController для поля имени.

Создать директиву no-dirty.

validationApp.directive('noDirty', function () {
  return {
    require: 'ngModel',
    link: function (scope, element, attrs, ngModelCtrl) {
      // override the $setDirty method on ngModelController
      ngModelCtrl.$setDirty = angular.noop;
    }
  }
})

Использовать эту директиву в разметке

<input type="text" name="name" class="form-control" ng-model="user.name" required="" no-dirty/>

Рабочий Plnkr

16
ответ дан Vinay K 23 August 2018 в 18:29
поделиться
Другие вопросы по тегам:

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