Angularjs 如何正确地将角度模块与AMD模块分开?
我对在一个非常大的AngularJS SPA中实现requireJS(和r.js优化器)的正确方法感到困惑。我想要一些关于如何组织项目的建议,这样我就可以从AMD模块化中获益,但不要过于复杂(将角度模块包装在里面需要jsAngularjs 如何正确地将角度模块与AMD模块分开?,angularjs,requirejs,amd,Angularjs,Requirejs,Amd,我对在一个非常大的AngularJS SPA中实现requireJS(和r.js优化器)的正确方法感到困惑。我想要一些关于如何组织项目的建议,这样我就可以从AMD模块化中获益,但不要过于复杂(将角度模块包装在里面需要jsdefined模块,这些模块都被转储到一个优化的.js文件中…) 我处理的文件有几个不同的类别: 我有一组供应商库(jquery、angular、angular resource、require、lodash等) 我有一些容器级AMD模块(身份验证、分析等) 我有很多角度模块、服
define
d模块,这些模块都被转储到一个优化的.js文件中…)
我处理的文件有几个不同的类别:
main.js
大致如下:
require.config({
paths: {
// load vendor libraries
'domReady': '../vendor/requirejs-domready/domReady',
'angular': '../vendor/angular/angular',
'jquery': '../vendor/jquery/jquery.min',
requireLib: '../vendor/requirejs/require'
... lots of these
//load app code
'app': '../app/app',
'AuthCtrl': '../app/modules/auth/AuthCtrl',
'UserCtrl': '../app/modules/auth/UserCtrl',
'SettingsCtrl': '../app/modules/auth/SettingsCtrl',
// potentially dozens and dozens of these...
//load auth library
'auth': '../app/modules/common/auth',
'analytics' '../analytics'
},
include: ['domReady', 'requireLib'],
shim: {
'angular': {
exports: 'angular'
}
}
...
});
目前,我已经将上面3个“类别”中的所有代码转储到一个大的丑陋js文件中
我不满意的是,我觉得我的控制器开始需要一份详细的模块依赖项列表:
require('app',[
'angular',
'jquery',
'AuthCtrl',
'UserCtrl',
'SettingsCtrl',
' ... potentially dozens? '
...
], function (angular, $, Auth, user, settings, ...potentially dozens?) {
'use strict';
return angular.module('ngAD', ['AuthCtrl', 'UserCtrl', 'SettingsCtrl' ...]);
});
我想我的问题有两个:
应该没有必要做所有这些 我以此为出发点 然后,所需要的就是将控制器和服务添加到AMD文件末尾的require部分。e、 g
require(
[
// Dependencies from lib
'angular',
'ngRoute',
'../lib/less.min.1.5.0',
// Angular directives/controllers/services
'app',
'core/viewHomeController',
'core/commonRoutes',
'core/header',
'events/events-ctrl
],
function (angular) {
var AppRoot = angular.element(document.getElementById('ng-app'));
AppRoot.attr('ng-controller','AppCtrl');
angular.bootstrap(document, ['TheApp']);
});
events-ctrl.js作为已添加的新控制器/服务,将以相同的方式添加更多控制器/服务
然后控制器/服务需要包装在require代码中,例如,这是events-ctrl.js的开始
define(['app'], function (app) {
app.factory('EventService', function($resource) {
return $resource('/api/events/:id');
});
app.controller('EventListCtrl', ['$scope', '$modal', 'EventService', function($scope, $modal, EventService) {
console.log('EventListCtrl working');
...
我对这个问题没有正确的答案,只是一直在努力解决它。另请参阅另一篇文章(并查看参考资料中的文章)。我试图解决的确切问题是在r.js中使用Angular+Require+lazy加载。我的项目是一个小(但不是琐碎的)应用程序,你可以(也可以不:)通过浏览代码找到有用的东西。欢迎评论。@NikosParaskevopoulos谢谢你Nikos,我会的-我感谢你的推荐!这太棒了,谢谢你花时间帮忙。这就是我需要的。