【问题标题】:$event object inside $http.get AngularJS$http.get AngularJS 中的 $event 对象
【发布时间】:2018-05-27 09:12:30
【问题描述】:

我目前正在使用 AngularJS 和使用 SlimPHP 的可消费 API 做一个 Web 应用程序。

当我注册用户时,我需要使用 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 调用范围内的对象 $event 未定义。

所以,我如何在 $http 调用中传递这个对象,或者我如何从 $http 调用的范围之外获取值,以便在外部进行检查来电。

谢谢!

【问题讨论】:

标签: javascript angularjs events


【解决方案1】:

您的设置将永远无法正常工作,因为在解决 $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()        
    }
  })
}

【讨论】:

  • 使用AngularJS框架,最好使用ng-submit directive
  • 嘿@georgeawg,你能解释一下为什么ng-submit 在这种特殊情况下应该更好吗?考虑到这一点,我同意如果您对元素或类似元素有一些狭窄的$scope 双向绑定,那么您应该使用指令。但是,大多数基本指令只是简单代码的包装器,以避免竞争冲突等,如果不是这种情况,vanilla JS 在没有摘要开销的情况下是完全相同的。但也许我在这里太“无神论者”了:) ??代码看起来更“有棱有角”,我也同意这一点,但我们只是在谈论提交表单,$scope 处理程序将起作用...
  • 当你离开 AngularJS 框架时,它会使单元测试和端到端测试变得更加困难。当您绕过框架的声明式风格时,会使代码更难理解、测试、调试和维护。
【解决方案2】:

这样试试

$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()”>

【讨论】:

  • 谢谢,但这些解决方案不起作用 :(。我尝试你回答但表单已发送,因为 var event 未定义
  • 请尝试我更新的答案。您应该在表单上使用 ng-submit 指令,而不是正常提交​​。它可以帮助您根据指令内的条件控制何时提交表单
  • 我尝试了新的解决方案,但表单正在提交。我删除了&lt;button&gt;type="submit",当我尝试出错时,表单正在发送。
  • 我不明白你的意思!抱歉,这是我能用这么多信息做的最好的事情
  • 最后我在if(response.data === true) 中发送带有jQuery 的表单。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2019-12-02
  • 2016-03-29
  • 1970-01-01
相关资源
最近更新 更多