我试图通过使用OCLazyLoad只加载用户请求的页面来轻松拥有一个无限大的单页面AngularJS Web应用程序。我想通过WebSocket而不是HTTP懒洋洋地加载HTML,JS和CSS。
我之所以想要WebSockets,是因为所有的网络浏览器都没有在域名上强制执行任何类型的COR,因此可以像以下那样进行扩展:
ws://worker01/AccountManagementHTMLs
ws://worker02/ForumCSS
等...
我希望进行这种扩展,因为它可能已经通过原始Base64块中的流文件帮助在一个浏览器之间进行对等文件传输。
还有使用覆盆子pis运行ubuntu作为廉价但功能强大的工作无人机的优势。
但在我开始研究那些实验性功能之前,将字符串加载到OCLazyLoad中会很酷。但是如果你看看我的Controller.js,OCLazyLoad只能从URL加载JS:
http://localhost/krogoth_gantry/DynamicJavaScriptInjector/ 的 MODULE.JS
(function() {
'use strict';
angular.module('app.FUSE_APP_NAME', ['flow']).config(config);
function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {
$stateProvider
.state('app.FUSE_APP_NAME', {
url: '/FUSE_APP_NAME',
views: {
'content@app': {
templateUrl: '/krogoth_gantry/DynamicHTMLInjector/?name=FUSE_APP_NAME',
controller: 'FUSE_APP_NAMEController as vm'
}
}
})
_DJANGULAR_SLAVE_VC_INJECTION_POINT_; /* krogoth_gantry Slave VCs automatically injected here. */
_DJANGULAR_SLAVE_MSAPI_INJECTION_POINT_
msNavigationServiceProvider.saveItem('AK_NAVCAT_KROGOTH.AK_SUBCATAGORY_KROGOTH.FUSE_APP_NAME', {
title: 'FUSE_APP_TITLE',
icon: 'FUSE_APP_ICON',
state: 'app.FUSE_APP_NAME',
weight: 3
});
_DJANGULAR_SLAVE_NAV_SERVICE_INJECTIONS_
}
})();
http://localhost/krogoth_gantry/DynamicJavaScriptInjector/ 的 CONTROLLER.JS
(function() {
'use strict';
angular.module('app.FUSE_APP_NAME').controller('FUSE_APP_NAMEController', FUSE_APP_NAMEController);
function FUSE_APP_NAMEController($log, $state, $ocLazyLoad) {
var vm = this;
vm.$onInit = onInit;
vm.viewName = 'FUSE_APP_NAME';
vm.viewDidLoad = viewDidLoad;
vm.initLazyModule = initLazyModule;
vm.stateGoToLazy = stateGoToLazy;
function onInit() {
console.log('FUSE_APP_NAME did finish loading');
vm.viewDidLoad();
}
function viewDidLoad() {
$('<p>Welcome.</p><br>').appendTo('ak-main');
}
function btnClickInitLazyModule() {
$ocLazyLoad.load('/krogoth_gantry/DynamicJavaScriptInjector/?name=LAZYMVC_UNLOADED&ov=file.js');
}
function stateGoToLazy() {
$state.go("app.LAZYMVC_UNLOADED");
}
}
})();
// Name:
// LAZYMVC_THING
// We will load: LAZYMVC_UNLOADED
// COMPILED HTML:
////krogoth_gantry/DynamicHTMLInjector/?name=FUSE_APP_NAME
// COMPILED JAVASCRIPT:
////krogoth_gantry/DynamicJavaScriptInjector/?name=FUSE_APP_NAME
OCLazyLoad似乎需要一个URL来加载其他AngularJS模块,有没有办法简单地加载原始字符串,就像它是JS或HTML文件的路径一样?
我的DynamicHTMLInjector和DynamicJavaScriptInjector没有指向文件系统路径,我只是简单地欺骗JavaScript来假设它正在加载静态文件。
答案 0 :(得分:1)
我碰巧需要类似的功能,它会让用户在textarea中编写js,然后运行这个js。
脚本将在您
后运行document.body.appendChild(newScript);
function run() {
var el = document.getElementById('cnsl');
var scriptText = el.value;
var oldScript = document.getElementById('scriptContainer');
var newScript;
if (oldScript) {
oldScript.parentNode.removeChild(oldScript);
}
newScript = document.createElement('script');
newScript.id = 'scriptContainer';
newScript.text = el.value;
document.body.appendChild(newScript);
}