$ событие объект внутри $ http.get AngularJS - PullRequest
0 голосов
/ 27 мая 2018

В настоящее время я делаю веб-приложение с AngularJS и расходный API-интерфейс с использованием SlimPHP.

Когда я регистрирую пользователя, мне необходимо выполнить проверку с помощью метода GET.В зависимости от возврата этого метода, я должен запустить $event.preventDefault() или нет.

Код AngularJS следующий:

$scope.checkEmails = function(e){
  var req = $http.get(url + 'adv/register/check?email=' + $scope.email).then(function(response){
      if(response.data === true) {
        e.preventDefault()
      }
  })
}

И кнопка HTML такая:

<button type="submit" class="btn btn-alt-success" ng-click="checkEmails($event)">

Проблема в том, что когда я пытаюсь выполнить e.preventDefault(), внутри области $ http-вызова, событие $ object не определено.

Итак, как я могу передать этот объект в вызове $ http , или как я могу получить значения из вызова $ http вне их области действия , чтобы выполнить проверку вне вызова.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Ваша настройка никогда не будет работать, потому что форма отправляется задолго до того, как запрос $http будет решен.Кнопка с type="submit" немедленно отправит свою ссылочную форму;из-за асинхронного характера JS задержка preventDefault() не имеет никакого эффекта.Поэтому избегайте отправки формы с помощью кнопки отправки и делайте это по коду.Есть несколько способов, в простом JS:

document.getElementById('formId').submit()

т.е.:

<button type="button" class="btn btn-alt-success" ng-click="checkEmails()">
        ^^^^^^^^^^^^^
$scope.checkEmails = function(e) {
  $http.get(url + 'adv/register/check?email=' + $scope.email).then(function(response){
    if (response.data !== true) {
      document.getElementById('formId').submit()        
    }
  })
}
0 голосов
/ 27 мая 2018

Попробуйте вот так

$scope.checkEmails = function(e){

  var req = $http.get(url + 'adv/register/check?email=' + $scope.email).then(function(response){
      if(response.data === true) {
        $scope.submitForm =false;
      } else{
         $scope.submitForm = true;
       }
  })

Добавьте ng-submit вот так

<form ng-submit=“submitForm && submit()”>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...