0

在我的项目中,我希望延迟加载的模块可以添加自己的状态,所以我找到了ui-router-extras。这对我来说真的很有用,但是当我想在延迟加载的模块中使用 ng-grid 时,如 demo 中的 module1,module1.js 文件如下所示:

 define(['angularAMD', 'ngGrid'], function () {

     var app = angular.module("module1", ['ui.router','ngGrid']);

     ...

main.js 文件如下所示:

require.config({
  waitSeconds: 100,
  paths: {
    "angularAMD": "../../lib/angularAMD",
    ...
    "jQuery": "../../lib/jquery",
    "ngGrid": "../../lib/ng-grid-2.0.14.debug"
  },
  shim: {
    "angular": { exports: "angular" },
    ...
    "ngGrid": ["angular", "jQuery"],
  },
  deps: ["app"]
});

但是我从 ng-grid 得到了一个例外:“未捕获的 TypeError:无法读取未定义的属性‘工厂’”。我找到了发生异常的ng-grid源代码:

angular.module('ngGrid.services').factory('$domUtilityService',['$utilityService', '$window', function($utils, $window) {....}

于是我发现在延迟加载的模块中,通过 angular.module('mymodule') 获取模块返回的是未定义的。有什么我忘了写的吗,还是有另一种方法可以在带有 ui-router-extras 的延迟加载模块中使用 ng-grid 或其他插件?

4

1 回答 1

0

您需要使用ngloadAngularAMD 的“”插件来动态加载模块。

文档摘录:


第 3 方 AngularJS 模块

第 3 方 AngularJS 模块,即使用 angular.module 语法创建的任何模块,可以在调用 angularAMD.bootstrap 之前作为任何普通 JavaScript 文件加载。引导后,必须使用包含的 ngload RequireJS 插件加载任何 AngularJS 模块。

define(['app', 'ngload!dataServices'], function (app) {...});

如果你需要使用 RequireJS 插件加载你的模块,或者如果你有复杂的依赖,你可以创建一个包装器 RequireJS 模块,如下所示:

define(['angularAMD', 'ui-bootstrap'], function (angularAMD) {
    angularAMD.processQueue();
});

在这种情况下,所有依赖项都将排队,当调用 .processQueue() 时,它将通过队列并使用 app.register 将它们复制到当前应用程序中:


https://github.com/marcoslin/angularAMD

于 2015-01-28T16:11:24.990 回答