我使用 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
尚未定义)。
如何判断角度是否已初始化?
答案 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无法使用角度