Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将angular 1控制器作用域方法作为回调传递给captcha库_Javascript_Html_Angularjs - Fatal编程技术网

Javascript 将angular 1控制器作用域方法作为回调传递给captcha库

Javascript 将angular 1控制器作用域方法作为回调传递给captcha库,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个客户在中国,需要在那里工作的专业验证码。我需要使用的验证码在这里 基本上有4个步骤可以让它工作: 在html标签中,添加以下行: <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script> 在回调中,向服务器发出POST请求以验证票证 我正在努力将其整合到使用Angular 1.5.6的UI中 我的控制器是: .controller('MyCtrl', function($scope) {

我有一个客户在中国,需要在那里工作的专业验证码。我需要使用的验证码在这里

基本上有4个步骤可以让它工作:

  • 在html标签中,添加以下行:

    <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
    
  • 在回调中,向服务器发出POST请求以验证票证
  • 我正在努力将其整合到使用Angular 1.5.6的UI中

    我的控制器是:

    .controller('MyCtrl', function($scope) {
      $scope.oldCallback = function(){
        console.log('in the old callback');
      };
    
      $scope.newCallback = function(){
        // PASS THIS AS THE CALLBACK TO NEW REGISTER BUTTON
      };
    })
    
    我已经创建了一个代码笔

    我能让它远程工作的唯一方法是在HTML中传入一个方法,例如

      <button type="submit" id="TencentCaptcha"
       data-appid="2090807227"
       data-cbfn="(function(res){alert('res is ' + res)})">
        Register
      </button>
    
    
    登记
    

    单击“注册”后,验证码库向用户显示一个带有质询的弹出窗口。完成后,将执行传递给
    数据cbfn
    的回调。如何从此回调调用控制器方法,传递结果?

    我创建了一个全局函数,然后能够在控制器中调用正确的方法:

    function callback(){
        var scope = angular.element(document.getElementById("home")).scope();
        scope.register();
    }
    
    .controller('MyCtrl', function($scope, $window) {
    
      $window.callback = function callback(res) {
          $scope.register();
      };
    });
    

    我创建了一个全局函数,然后能够在控制器中调用正确的方法:

    function callback(){
        var scope = angular.element(document.getElementById("home")).scope();
        scope.register();
    }
    
    .controller('MyCtrl', function($scope, $window) {
    
      $window.callback = function callback(res) {
          $scope.register();
      };
    });
    

    您还可以从角度控制器向窗口添加函数:

    function callback(){
        var scope = angular.element(document.getElementById("home")).scope();
        scope.register();
    }
    
    .controller('MyCtrl', function($scope, $window) {
    
      $window.callback = function callback(res) {
          $scope.register();
      };
    });
    
    这样,您就不必请求文档元素,文档元素以后可能会更改范围或id

    另外:
    $compileProvider.debugInfoEnabled(false)
    实际上将禁用从文档元素检索范围的功能,就像您所做的那样


    出于性能和安全原因,您应该在生产模式下关闭debugInfo功能。

    您也可以从角度控制器将功能添加到窗口:

    function callback(){
        var scope = angular.element(document.getElementById("home")).scope();
        scope.register();
    }
    
    .controller('MyCtrl', function($scope, $window) {
    
      $window.callback = function callback(res) {
          $scope.register();
      };
    });
    
    这样,您就不必请求文档元素,文档元素以后可能会更改范围或id

    另外:
    $compileProvider.debugInfoEnabled(false)
    实际上将禁用从文档元素检索范围的功能,就像您所做的那样


    出于性能和安全原因,您应该在生产模式下关闭debugInfo功能。

    您的确切问题是什么?也许这可以帮助您:更新问题假设您的按钮不位于控制器有权访问的视图中是否安全?确实如此,它位于该控制器的模板中…您需要首先全局公开函数,然后从模板中呈现按钮。您确切的问题是什么?也许这可以帮助您:更新问题假设您的按钮不位于控制器有权访问的视图中是否安全?确实如此,它位于该控制器的模板中…您需要首先全局公开函数,然后从模板渲染按钮。