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

时间:2015-10-30 13:28:38

标签: javascript html angularjs

我正在使用angularjs,并希望检查参数lang=XX的网址。

如果找到,我的js调用应该将语言参数替换为url中的语言参数:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?language=en"></script>

这可能吗?

2 个答案:

答案 0 :(得分:1)

这不是&#34; Angular&#34;方式,但允许您向页面添加脚本:

  options3d: {
            enabled: true,
            alpha: 15,
            beta: 15,
            depth: 50,
            viewDistance: 25
        }

答案 1 :(得分:1)

有一个&#39; Angular&#39;但是,我不确定它对简单的Javascript解决方案有多大用处。无论如何,您可以使用$location服务来搜索当前网址。假设您有[{1}}作为参数,则可以使用lang返回$location.search().lang的值(如果存在)。

然后,您将创建一个服务或工厂,以使用language参数异步加载Google Maps。您还需要提供回调方法。那个回调方法将是一个承诺。这是样品工厂:

lang

这可以作为工厂使用,因为它可以从应用程序移植到应用程序。但是,在单个应用程序中,它有用一次,因为您不会多次调用它。

然后,在你的控制器中:

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;
        }
    };
});

除非你有理由需要使用Angular,否则简单的方法将是你索引中的普通javascript:

app.controller('MainCtrl', function($scope, $location, GMapsFactory) {
    var lang = $location.search().lang || 'en';

    GMapsFactory.loadLocale(lang).then(function() {
        console.log(google.maps);
    });
});