Javascript 从服务器获取脚本位置

Javascript 从服务器获取脚本位置,javascript,angularjs,Javascript,Angularjs,我有一个控制器(spring),它返回应用程序版本(“version/get”),我需要使用这个版本来指定js文件的位置: <script src="/r/{{appVersion}}/js/app.js"></script> 然后: <script src="js/controllers/ResourceLoaderController.js"></script> <div ng-controller="ResourceLoaderCon

我有一个控制器(spring),它返回应用程序版本(“
version/get
”),我需要使用这个版本来指定js文件的位置:

<script src="/r/{{appVersion}}/js/app.js"></script>
然后:

<script src="js/controllers/ResourceLoaderController.js"></script>
<div ng-controller="ResourceLoaderController">
    <link rel="stylesheet" type="text/css" href="/r/{{appVer.text}}/css/app.css" charset="utf-8">
    <script src="/r/{{appVer.text}}/js/app.js"></script>
</div>


但是我不能在标题中使用

请在您的
$http
成功中尝试此功能

// use global document since Angular's $document is weak
var s = document.createElement('script'); 
s.src = '/r/'+response.data.text+'/js/app.js';
document.body.appendChild(s);
它将创建一个具有正确src的新脚本元素

Angular仅在页面加载并删除后处理该网页 在
标记被处理一次之前生成 (脚本标记只运行一次)。其他标签,如
img
将 更改其属性时屏幕的视觉外观 在页面加载后更改。。。但正如前面提到的,脚本是 仅处理一次,甚至在页面加载期间和加载之前 我永远无法控制


因此,您需要附加脚本标记。或者您可以通过服务器端编码来实现这一点。

我认为这可能会奏效

1。拥有
脚本
标签和
链接
标签,为他们提供特定ID


2。将控制器修改为

module.controller('ResourceLoaderController', [
    '$rootScope', '$scope', '$http',
    function ($rootScope, $scope, $http) {
        'use strict';

        $scope.getVersion = function() {
            $http.get('/version/get').then(function (response) {
               // $rootScope.appVer = response.data;
               var scriptElement = angular.element(document.querySelector( '#theScript'));
               scriptElement.src = '/r/' + response.data.text +'/js/app.js';
              var cssElement = angular.element(document.querySelector( '#theCSS'));
               cssElement.href = '/r/' + response.data.text +'/css/app.css';
            });
        };

        $scope.getVersion();
    }]);
将ng controller属性放入html标记/head标记中


或者尝试动态创建脚本和css标记。

您应该像以下那样动态注入脚本:

$scope.getVersion = function() {
    $http.get('/version/get').then(function (response) {
        $rootScope.appVer = response.data;
        var myScript = document.createElement('script');
        myScript.type ='text/javascript';
        myScript.async ='true';
        myScript.src = window.location.protocol + "//" + window.location.host + "/r/" + response.data + "/js/app.js"
        document.getElementsByTagName('head')[0].appendChild(myScript);
    });
};

$scope.getVersion();

您可能想查看。如果动态创建脚本标记是否可以?部分。。。它是创建的,但我在app.js中有其他角度控制器,它们在运行时没有定义。谢谢你的回答。这是可行的,但我在app.js中包含了其他角度控制器,并得到一个错误,即该控制器未定义。谢谢您的回答。我包括app.js,但它包含其他angular.js控制器,我在运行时收到一个错误,该控制器未定义。
$scope.getVersion = function() {
    $http.get('/version/get').then(function (response) {
        $rootScope.appVer = response.data;
        var myScript = document.createElement('script');
        myScript.type ='text/javascript';
        myScript.async ='true';
        myScript.src = window.location.protocol + "//" + window.location.host + "/r/" + response.data + "/js/app.js"
        document.getElementsByTagName('head')[0].appendChild(myScript);
    });
};

$scope.getVersion();