我正在使用angularjs
,并且想检查URL中的参数lang=XX
。
如果找到,我的js调用应将url参数替换为language参数:
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?language=en"></script>
那可能吗?
有一种“角度”方法,但是,我不确定它是否比简单的Javascript解决方案有用。无论如何,您都可以使用该$location
服务搜索当前URL。假设您有lang
自己的参数,则可以使用$location.search().lang
返回值lang
(如果存在)。
然后,您将创建服务或工厂以使用language参数异步加载Google Maps。您还需要提供一个回调方法。该回调方法将是一个应许。这是样本工厂:
app.factory('GMapsFactory', function($q, $window) {
var _base = 'https://maps.googleapis.com/maps/api/js?language=';
return {
loadLocale: function(loc) {
var _defer = $q.defer();
var _tag = document.createElement('script');
_tag.src = _base + loc + '&callback=gmLocaleCallback';
$window.gmLocaleCallback = _defer.resolve;
document.body.appendChild(_tag);
return _defer.promise;
}
};
});
这对于工厂来说非常有用,因为它可以在应用程序之间进行移植。但是,在单个应用程序中,它一次有用,因为您不会多次调用它。
然后,在您的控制器中:
app.controller('MainCtrl', function($scope, $location, GMapsFactory) {
var lang = $location.search().lang || 'en';
GMapsFactory.loadLocale(lang).then(function() {
console.log(google.maps);
});
});
除非您有需要使用Angular的理由,否则简单的方法还是在索引中使用纯JavaScript:
// From SO solution: http://stackoverflow.com/a/901144/715597
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var _lang = getParameterByName('lang');
document.write('<script src="https://maps.googleapis.com/maps/api/js?language='+_lang+'">\x3C/script>');
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句