Javascript 将angular 1控制器作用域方法作为回调传递给captcha库
我有一个客户在中国,需要在那里工作的专业验证码。我需要使用的验证码在这里 基本上有4个步骤可以让它工作: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) {
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
.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功能。您的确切问题是什么?也许这可以帮助您:更新问题假设您的按钮不位于控制器有权访问的视图中是否安全?确实如此,它位于该控制器的模板中…您需要首先全局公开函数,然后从模板中呈现按钮。您确切的问题是什么?也许这可以帮助您:更新问题假设您的按钮不位于控制器有权访问的视图中是否安全?确实如此,它位于该控制器的模板中…您需要首先全局公开函数,然后从模板渲染按钮。