Rtr*_*ier 8 recaptcha angularjs angular-translate
我试图在角度站点上实现Recaptcha V2.
我正在使用角度翻译,我不知道如何使用正确的语言重新生成reCaptcha对象 $scope
有什么办法吗?或使用正确的lang重新加载对象的过程?
谢谢
基于API的限制,您可以动态加载脚本:
(来源)
function loadScript(url, callback)
{
// Adding the script tag to the head as suggested before
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// Then bind the event to the callback function.
// There are several events for cross browser compatibility.
script.onreadystatechange = callback;
script.onload = callback;
// Fire the loading
head.appendChild(script);
//modification so we can remove this after
return script;
}
Run Code Online (Sandbox Code Playgroud)
注意:这是一个常规的 JS 函数
在你的 Angular 控制器中
$scope.loadGoogleRecaptcha = function (id, lang) {
/// using timeout not to use $apply
$timeout(function () {
//set default value
var elemntID = id || false;
var language = lang || 'en';
if (!elemntID) {
console.warn('NO Id selected for re-captcha loading!')
return false;
}
var element = document.getElementById(elemntID)
if (angular.element(element).length == 0) {
console.warn('provided id doesn\'t exist ', elemntID);
return false;
}
//Delete oldscript
if ($rootScope.addedScript)
angular.element($rootScope.addedScript).remove();
//clear current recaptcha container
angular.element(element).empty();
var url = "https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=" + lang;
return $window.loadScript(url, function () {
console.log('Scipt loaded:', url);
})
});
}
Run Code Online (Sandbox Code Playgroud)
使用 Angular-translate-localStorage 使用当前语言初始化验证码
$rootScope.addedScript = $scope.loadGoogleRecaptcha('g-recaptcha-register' ,$window.localStorage.getItem( 'NG_TRANSLATE_LANG_KEY'));
Run Code Online (Sandbox Code Playgroud)
切换语言的函数示例
$rootScope.changeLanguage = function (langKey) {
$translate.use(langKey);
$rootScope.selectedLanguage = langKey;
$scope.loadGoogleRecaptcha('g-recaptcha-register' , langKey);
};
Run Code Online (Sandbox Code Playgroud)
或者你可以使用观察者
$scope.$watch(
'selectedLanguage', function (n, o) {
//putting if to prevent double fetch the first time
if (!!n && n != o){
$rootScope.addedScript = $scope.loadGoogleRecaptcha('g-recaptcha-register', n);
}
}
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2007 次 |
| 最近记录: |