我正在将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", [ ... ]);
});
Run Code Online (Sandbox Code Playgroud)
每次我的页面加载时我都不想要包含指令和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) {
// ...
}
]);
});
Run Code Online (Sandbox Code Playgroud)
如何告诉Angular ui.codemirror在app模块中注入模块(或任何其他模块)?
我不在乎它是否是一种完成此操作的hackish方式,除非它涉及修改外部依赖项的代码.
如果它有用:我正在运行Angular 1.2.0.
我需要建议设计一个具有多个复杂模块的AngularJS应用程序,并根据模块在认证和授权后加载的用户角色.有些用户可以访问一个简单的模块,有些用户可以访问仪表板,有些用户可以访问2个以上的模块.
我们已经确定了很多可以在不同模块中重用的指令.在设计阶段,我们确定了应该存在的以下事项,我们对以下某些项目有答案,但我们仍需要专家的建议:
该应用程序的UI看起来像是一个固定的菜单栏位于页面顶部,左上角有一个下拉导航,具有多个链接,具体取决于用户的角色.当用户单击链接时,相应的模块应该加载到页面中.必须有一个空项目,它是手动引导的,并在运行时加载其他模块.
我们的方法是具有以下文件夹结构:
所以我的问题是:
我有接受如下配置的提供者模块:
angular.module('app', ['search']).
config(['$searchProvider', function($searchProvider) {
$searchProvider.options({
resultLimit:50,
defaultSort:'highToLow'
});
}]);
Run Code Online (Sandbox Code Playgroud)
每个客户端都会有一个新的应用程序实例化 --- 所以我正在考虑使用客户端自助服务门户来配置meta对象。
这意味着提供者模块现在需要在回调方法中等待,meta然后才能设置各自的配置。
但让我们都记住:配置块- 在提供者注册和配置阶段执行。只有提供者和常量可以注入配置块。这是为了防止服务在完全配置之前意外实例化......
...所以文档说您可以在配置块中使用 provider,但我不确定您是否可以使用它们进行服务调用。因为我不知道如何以正确的方式处理这个问题,所以我将向您展示我的“高级”想法:
使用另一个提供程序回调包装依赖提供程序:
angular.module('app', ['search','meta']).
config(['$searchProvider','$metaProvider', function($searchProvider, $metaProvider) {
$metaProvider.get(function(meta){
$searchProvider.options(meta);
});
}]);
Run Code Online (Sandbox Code Playgroud)
处理这个问题的最佳方法是什么?