Краткий ответ: ваш метод 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
.
Переопределить метод $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/>