Angularjs 谷歌';新的reCaptcha使用ui路由器

Angularjs 谷歌';新的reCaptcha使用ui路由器,angularjs,angular-ui-router,recaptcha,Angularjs,Angular Ui Router,Recaptcha,当我勾选recaptcha框时,ui路由器似乎出现故障。页面上所有具有ui sref属性的链接都停止工作,但我没有收到任何错误消息。请看我设置的。你知道原因是什么吗 script.js var app = angular.module('app', ['ui.router']) .config(function($stateProvider, $urlRouterProvider) { $stateProvider .state('home', { url: '/',

当我勾选recaptcha框时,ui路由器似乎出现故障。页面上所有具有ui sref属性的链接都停止工作,但我没有收到任何错误消息。请看我设置的。你知道原因是什么吗

script.js

var app = angular.module('app', ['ui.router'])

.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider
  .state('home', {
    url: '/',
    templateUrl: 'home.html',
    controller: function() {
      grecaptcha.render('captcha', {
        sitekey: "--sitekey--"
      })
    }
  })
  .state('other', {
    templateUrl: 'other.html'
  });

  $urlRouterProvider.otherwise('/');
})
index.html

<!DOCTYPE html>
<html ng-app="app">

<head>
  <script data-require="angular.js@*" data-semver="1.4.0-rc.0" src="https://code.angularjs.org/1.4.0-rc.0/angular.js"></script>
  <script data-require="ui-router@*" data-semver="0.2.13" src="//rawgit.com/angular-ui/ui-router/0.2.13/release/angular-ui-router.js"></script>
  <link rel="stylesheet" href="style.css" />
  <script src="script.js"></script>
  <script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
  <ui-view></ui-view>
</body>

home.html

<h1>Home</h1>

<p>Click the re-captcha, then try to change state by clicking the link below.</p>

<p><a ui-sref="other">Go to other state</a></p>

<div id="captcha"></div>
主页
单击重新验证码,然后单击下面的链接尝试更改状态


这证明了这种行为。

我在使用角度布线时也遇到了同样的错误

您可以通过放置以下代码来解决此问题:

在index.html中

在您的script.js中:


我在使用角度布线时也遇到了同样的错误

您可以通过放置以下代码来解决此问题:

在index.html中

在您的script.js中:


我找到了一个简单的方法来解决任何类型的路由器的问题。当grecaptha未定义时,这意味着我们在您的情况下遇到了同步问题。因此,在我/你的控制器中,你应该使用例如>

所以:
在HTML中

在控制器中:
$.getScript(“https://www.google.com/recaptcha/api.js");


在这里,您可以让grecaptcha像第一次加载页面一样完成这项工作。

我找到了一种简单的方法来解决angular上任何类型路由器的问题。当grecaptha未定义时,这意味着我们在您的情况下遇到了同步问题。因此,在我/你的控制器中,你应该使用例如>

所以:
在HTML中

在控制器中:
$.getScript(“https://www.google.com/recaptcha/api.js");


在这里,您可以让grecaptcha执行此操作,就像您第一次加载页面一样。

在使用ngRoute时有效:您尝试过吗?我尝试过所有可以找到的角度模块,包括来自VictorCortex的模块,但我得到了相同的行为。在使用ngRoute时有效:您尝试过吗?我尝试过所有可以找到的角度模块,包括来自大脑皮层的那个,但我也有同样的行为。
element.bind("click", function(e) {
    var button = e.which || e.button;
    if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
      // HACK: This is to allow ng-clicks to be processed before the transition is initiated:
      var transition = $timeout(function() {
        $state.go(ref.state, params, options);
      });
      e.preventDefault();

      // if the state has no URL, ignore one preventDefault from the <a> directive.
      var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;
      e.preventDefault = function() {
        if (ignorePreventDefaultCount-- <= 0)
          $timeout.cancel(transition);
      };
    }
  });
//e.preventDefault = function() {
//    if (ignorePreventDefaultCount-- <= 0)
//        $timeout.cancel(transition);
//};
var app = angular.module('app', ['ui.router']);
app.config(function($stateProvider, $urlRouterProvider) {
$stateProvider.state('home', 
        {
            url: '/',
            templateUrl: 'home.html',
            controller: function() {
                 function onloadCallback() {
                     grecaptcha.render('yourHTMLElementId', {
                          'sitekey' : 'yourSiteKey'
                     });
                 }
                 onloadCallback();
           }
        })
    .state('other', {
        templateUrl: 'other.html'
    });
    $urlRouterProvider.otherwise('/');
})