【发布时间】:2014-01-01 22:38:56
【问题描述】:
是否可以从 Angular 控制器加载普通的旧 JS 或 AMD 模块?我以前为此使用过 RequireJS。
我之前在一个相当大的项目中使用过 AngularJS 和 RequireJS。我正在开发一个基于 MEAN Stack 种子的新项目,这不使用 requireJS。
我不是很清楚,但是 Angular 有一个加载模块的系统——我可以从我的 Angular 控制器中加载一段特定的 javascript 吗?
有没有办法修改我的 module() 声明以包含额外的常规 javascript 文件?
谢谢!
编辑:为了让大家了解我在做什么,我有一个页面可以编辑几个不同的表单。这些中的每一个都作为“表单”保存到我的数据库中。根据表单的类型,不同的字典值映射到不同子视图中的不同字段。我的一些表格有例如下拉列表或输入列表。这些是不同的,但有关“表单”的其他所有内容都以通用方式处理。
所以我有这个单数的表单控制器来处理一堆不同的表单,我对结果很满意。主要问题在于每个表单都有一组单独的数据,除非我需要,否则我希望避免加载。
我可以通过检查驱动我的 ng-include(加载子表单)的下拉列表来检查我正在加载哪个表单。
在短期内,我刚刚加载了所有内容并在我的范围内创建了命名空间以进行区分。
例如 $scope.form1 和 $scope.form2 用于特定表单的数据/规则。我宁愿不要加载我不需要的js。
编辑 2: http://jsfiddle.net/HB7LU/1320/
function MyCtrl($scope) {
$scope.doSomething = function()
{
//I'm used to wrapping with e.g require('jquery..... here, can I do the same thing with angular?
alert(" I need to run a jquery function here...");
var xml = $(someblock);
};
}
我已经对我正在谈论的内容提出了质疑。我想根据控制器中的某些路径加载任意 JS,并且仅在需要时加载。
基本上,我有一些较大的命名空间要加载,具体取决于所选的多个选项之一,并且仅加载它们会很昂贵。
【问题讨论】:
-
澄清一下,您想使用 Angular 延迟加载非 Angular 代码吗?
-
是的。我已经更新了我的问题以预先说明这一点。我有一组嵌套的视图,其中下拉框使用第二个控制器加载第二个角度视图(通过包含)。所以我遇到了时序问题,将其直接包含在子模板中
-
您需要使用 Angular 承诺,创建一个脚本标签并向其添加一个 onload 侦听器,该侦听器将解析该承诺,以便您的逻辑可以在脚本准备好后继续。我将整个模块延迟加载到我的角度应用程序(主模块)中。在引导之后加载特定于 Angular 的代码会更深入一些,但逻辑与我上面列出的基本相同,只是您还必须向 Angular 注册加载的代码。如果您给我更多关于如何帮助您的指导,我将通过发布的答案对此进行扩展。
-
我在jsfiddle.net/HB7LU/1320举了一个愚蠢的例子
-
我想一个更可能的例子是假设我有一个选项可以为特定国家/地区加载某些内容,并且每个国家/地区都有 80k 的数据要加载特定验证、列表等。我没有我不想加载 80k x 100 个不同的变体,但我想在选择特定国家/地区时加载该国家/地区的数据。
标签: javascript angularjs lazy-loading