我有这个JStaticLoader repo,方便我在需要时加载静态文件。虽然,它没有角化,但您仍然可以在您的应用程序中使用它作为directive
,直接从您的应用程序中调用它,controller
甚至在$rootScope
加载您想要的js
.
JStaticLoader
使用纯js,不需要依赖。它用于XMLHttpRequest
加载静态文件。
例如在您的app.js
(on $routeChangeStart
or $stateChangeStart
)中使用
myApp
.run(['$rootScope', '$http', function ($rootScope, $http) {
var scriptExists = function (scriptId) {
if (document.getElementById(scriptId)) {
return true;
}
return false;
};
var addLazyScript = function (scriptId, url) {
if (scriptExists(scriptId)) return;
var js = document.createElement('script'),
els = document.getElementsByTagName('script')[0];
js.id = scriptId;
js.src = url;
js.type = "text/javascript";
els.parentNode.insertBefore(js, els);
};
$rootScope.$on('$routeChangeStart', function (e, current) {
if (current.controller === 'MainCtrl') {
var pathUrls = ["https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/js/materialize.js"],
scriptId = 'lazyScript1';
if (scriptExists(scriptId)) return;
JStaticLoader(pathUrls, { files: ['js'] }, function (vals, totalTime) {
/* Success */
for (var i = 0; i < vals.length; i++) {
var path = vals[i];
addLazyScript(scriptId, path);
}
}, function (error, totalTime) {
/* Error */
console.warn(error, totalTime);
});
}
});
}]);
在上面的示例中,我js
使用 xhr 获取了一个文件,并在完成后将其作为 a 添加script
到 mydocument
中。然后将从浏览器的缓存中加载该脚本。