加载前如何将参数传递给javascript文件url?

成员之声

我正在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章