初始化角度后加载角度模块

时间:2014-11-03 09:39:52

标签: javascript angularjs requirejs amd

我使用 requirejs 来加载 angular 和angular的模块。

我想要一起要求所有必要的模块(例如angular-sanitize.js)。

在我的 require.config 中,我定义了以下规则:

require.config({
    path: {
         'angular':'libs/angular-modules'
    },
    shim: {
        'angular': { 
            deps: ['libs/angular'],
            exports: 'angular'
        },
        ...
    }
});

libs / angular-modules.js 中我定义了以下模块:

define(
    [
        'libs/angular-sanitize',
        'libs/angular-animate'
    ], 
    function () {
        return angular;
    }
);

我希望在加载模块 angular.js 时已经加载了。但有时我会收到错误:

Cannot read property '$$minErr' of undefined angular-sanitize.js:8

这是 angular-sanitize.js 的第八行:

var $sanitizeMinErr = angular.$$minErr('$sanitize');

所以这意味着 angular.js 文件没有加载,但在网络标签中,我看到它是。 我想在初始化 angular-sanitize 模块 angular.js 时已加载但未初始化(window.angular尚未定义)。

如何判断角度是否已初始化?

3 个答案:

答案 0 :(得分:0)

我希望在您的RequireJS配置中看到angular-sanitize的垫片:

shim: {
    ... [whatever you already have] ,

    'angular-sanitize': { 
        deps: ['angular'],
    },
}

我没有提出exports选项,因为我不确定那里有什么意义。对于AngularJS模块,我不希望exports

一般的经验法则是,如果您打开库的源代码并且无法找到它自己调用define,那么它需要一个垫片。 angular-animate可能还需要一个垫片。

答案 1 :(得分:0)

您可以在路由配置解析中延迟加载依赖项。返回一个promise,并使用Require首先加载这些依赖项,然后解析promise:



.when('/login', {
    templateUrl: appConfig.getUrl('login'),
    resolve: { load: ['$q', '$rootScope', '$log', function ($q, $rootScope, $log) {
      var deferred = $q.defer();
      require(appConfig.getDeps('login'), function () {
        $rootScope.$apply(function () {
          forms.hideError();
          deferred.resolve();
        });
      });
      return deferred.promise;
      }]
    }
  })




答案 2 :(得分:-1)

AngularJs不支持延迟加载......但是。

互联网上有一些东西可以让人懒散加载,但在我看来,它们很乱,而且过于膨胀而且收益最小

由于这个原因,

requireJS无法使用角度