当前位置: 首页 > 面试题库 >

动态注入模块(仅在需要时)

山森
2023-03-14
问题内容

我将Require.js与Angular.js结合使用。

一些控制器需要巨大的外部依赖关系,而其他控制器则不需要,例如,FirstController需要Angular UI
Codemirror
。这至少是135 kb,至少:

require([
  "angular",
  "angular.ui.codemirror" // requires codemirror itself
], function(angular) {
  angular.module("app", [ ..., "ui.codemirror" ]).controller("FirstController", [ ... ]);
});

我不想每次我的页面加载时都只包含指令和Codemirror lib只是为了使Angular开心。
这就是为什么我现在仅在遇到路线时才加载控制器,就像这里所做的那样。

但是,当我需要类似的东西时

define([
  "app",
  "angular.ui.codemirror"
], function(app) {
  // ui-codemirror directive MUST be available to the view of this controller as of now
  app.lazy.controller("FirstController", [
    "$scope",
    function($scope) {
      // ...
    }
  ]);
});

我如何告诉Angular ui.codemirror在应用程序模块中也插入模块(或任何其他模块)?
我不在乎这是否是一种骇人听闻的方法,除非它涉及修改外部依赖项的代码。

如果有用: 我正在运行Angular 1.2.0。


问题答案:

我一直在尝试将requirejs + Angular混合使用一段时间。到目前为止,我一直在我的努力下在Github中发布了一个小项目(angular-
require-lazy
),因为对于内联代码或小提琴来说,范围太大。该项目演示了以下几点:

  • AngularJS模块是延迟加载的。
  • 指令也可以延迟加载。
  • 有一个“模块”发现和元数据机制(请参阅我的另一个宠物项目:require-lazy)
  • 该应用程序自动拆分为捆绑包(即使用r.js进行构建)

怎么做的:

  • 提供者(例如$controllerProvider$compileProvider)由捕获config功能(技术我第一锯在angularjs-requirejs-懒惰控制器)。
  • 引导完成后,angular将被我们自己的包装程序代替,该包装程序可以处理延迟加载的模块。
  • 注入器被捕获并作为承诺提供。
  • AMD模块可以转换为Angular模块。

这个实现满足了您的需求:它可以延迟加载Angular模块(至少是我正在使用的ng-grid),绝对是hackish的:)且不会修改外部库。

评论/意见绝对值得欢迎。

(编辑)此解决方案与其他解决方案的区别在于它不执行动态require()调用,因此可以使用r.js(和我的require-
lazy项目)构建。除此之外,这些想法或多或少地融合在各种解决方案中。

祝你们好运!



 类似资料:
  • 问题内容: 我没有在单个页面应用程序上使用angular,但是由于加载顺序问题,我想一次定义主应用程序模块。同时,我想在每页的基础上注入/请求模块,而不要一概而论,因为并非所有JS文件都会在每页上加载。 我可以定义没有必需模块的应用程序吗: app = angular.module(“ app”,[]) 并将它们从控制器注入还是在以后注入? 问题答案: 不,目前尚无官方支持。引导AngularJS

  • 问题内容: 我有一台受信任的远程服务器,其中存储了许多自定义Python模块。我可以通过HTTP(例如,使用)作为文本/纯文本来获取它们,但是我无法将获取的模块代码保存到本地硬盘上。如何将代码作为完全可操作的Python模块(包括其全局变量和导入)导入? 我想我必须使用和模块功能的某种组合,但是我还无法使其工作。 问题答案: 看起来这应该可以解决问题:导入动态生成的模块 另外,按照ActiveSt

  • 16.6. 动态导入模块 好了,大道理谈够了。让我们谈谈动态倒入数据吧。 首先,让我们看一看正常的导入模块。 import module 语法查看搜索路径寻找已命名模块并以名字导入它们。你甚至于可以以这种方法,以逗号分割同时导入多个模块,本章代码前几行就是这样做的。 例 16.13. 同时导入多个模块 import sys, os, re, unittest 这里同时导入四个模块:sys (

  • 问题内容: 我陷入了本机项目中的一个问题。我试图做一个通用的需求文件,在其中导出所有模块。之后,我只需要我的“ require.js”文件,以避免在每个文件中都这样调用require(’../../ ModuleName’)。 我有4个文件: require.js: 在index.ios.js中(他的Home和MyView模块正确获取了importet) Home.js(模块MyView没有获得重

  • 问题内容: 只是想知道我们如何在node.js 8中导入模块-我们仍在使用吗? 还是我们仍然需要babel来使用? 我一直在挖掘,但似乎没有答案。如果我们仍然必须使用require,为什么节点还不能实现? 问题答案: UPDATE-2018.11.15↓ 简短答案 我们仍在使用 长答案 ESM加载已部分降落在2017年9月发布的node 上。正因为如此,它已经成为规范的一部分,并且已经作为实验功能

  • 问题内容: 好的,我已经搜索了高低位,但是无法可靠地确定Webpack是否可行。 https://github.com/webpack/webpack/tree/master/examples/require.context 似乎表明可以将字符串传递给函数并加载模块… 但是我的尝试没有用:webpack.config.js server.js modules /模块中名为test.js的模块 但是