我正在尝试使用 requirejs延迟加载Angular控制器
这是我的解析代码正在工作正如预期的那样


 require(['controllers /'+ controllerName],function(data){
 $ stateParams.controllerName = data.name || controllerName;
 deferred.resolve();
});

&#xA;&#xA; 但此方法正在添加<代码>&lt; script&gt; 标记到 head
并带有请求的URL
我想使用 XHR加载代码>以便它不会添加任何脚本标记或显示在资源中。
我试过这样的
&#xA;&#xA; require(['text!controllers /'+ controllerName +'。js'],function(data){&#xA; var funcData = new Function(data)(); //期望数据为字符串&#xA; $ stateParams.controllerName = funcData.name || controllerName;&#xA; deferred.resolve();&#xA;});&#xA;
&#xA;&#xA; < p>但是因为requirejs我得到错误正在尝试加载 /text.js
而不是 /controllers/nameOfController.js
&#xA;&#xA; 有没有办法修复或其他更好的方法吗?&#xA;(我想只用 XHR
加载脚本)
答案 0 :(得分:0)
您的项目中是否有requirejs text依赖项?
将查找text.js
,如果不存在则会出错。
答案 1 :(得分:0)
好吧..最后这是我在不违反requirejs
的实际功能的情况下想出来的。现在它使用xhr
加载脚本..
将其添加到main.js
以覆盖原始方法。
注意:仅在PROD中使用此功能,否则将在浏览器中松开脚本调试。
require.load = function (context, moduleName, url) {
var config = (context && context.config) || {},
isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document),
isWebWorker = !isBrowser && typeof importScripts !== 'undefined',
makeError = function (id, msg, err, requireModules) {
var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
e.requireType = id;
e.requireModules = requireModules;
if (err) e.originalError = err;
return e;
},
xmlhttp;
if (isBrowser) {
if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
if (xmlhttp.status == 200) {
try {
new Function(xmlhttp.responseText)();
context.completeLoad(moduleName);
} catch (e) {
context.onError(makeError('scripterror', 'executing script failed for ' + moduleName + ' at ' + url, e, [moduleName]));
}
}
else context.onError(makeError('notloaded', 'loading scripts failed for ' + moduleName + ' at ' + url, xmlhttp.status, [moduleName]));
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
} else if (isWebWorker) {
try {
importScripts(url);
context.completeLoad(moduleName);
} catch (e) {
context.onError(makeError('importscripts', 'importScripts failed for ' + moduleName + ' at ' + url, e, [moduleName]));
}
}
};