2013-09-17 5 views
0

Я пытаюсь сделать форму с проверкой конца назад через Restangular, Angular-ui-utils, но я не могу понять, как заставить Restangular обещать закончить, прежде чем продолжить работу с функцией, и, таким образом, моя программа вернет нулевые значения.Как сделать последовательное обещание последовательным?

Вот мой код

HTML:

... 
<form> <input name="name" 
     ng-model="name" 
     ui-validate="{uniqueName: 'uniqueName($value)'}"> 
     Is name duplicated? {{form.name.$error.uniqueName}}</input> 

</form> 
... 

Javascript: выход

... 
function myCtrl($scope,Restangular) { 
... 
$scope.uniqueName(value) { 
    var checkResult; 
    Restangular.one('service').one('validate',value).get().then(function(result){ 
     checkResult = result; 
    } 
    return checkResult; 
} 
... 
} 

Отдых Serice действительно прямо вперед, это либо 'ложь', если имя не в databse и «true», если это так.

ответ

0

Поскольку вызов для подтверждения уникального имени является асинхронным. Вы не можете реализовать, вернув checkResult.

ui-validate есть я думаю, что поддержка обещания. Поэтому вы возвращаете что-то вроде

$scope.uniqueName(value) { 
    return Restangular.one('service').one('validate',value).get(); 
} 

которое должно быть обещанием, на которое я верю. Если вы находитесь в правильной версии ui-validate, тогда она должна работать. Проверьте этот фиксатор https://github.com/angular-ui/angular-ui/issues/257, который добавляет поддержку обещания в api.

+0

Я использую ui-validate из новейшего пакета угловых ui, но проблема остается. Когда я поменял код так, как вам было предложено, консоль не регистрирует никаких ошибок, но результат для проверки всегда имеет успех => результат ошибки всегда ложный. –

+0

Этот вопрос 257 кажется закрытым, но версия, которая будет включать это изменение, еще не опубликована. –

Смежные вопросы