Javascript 从服务器获取脚本位置
我有一个控制器(spring),它返回应用程序版本(“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
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();