在 codeproject 上找到一个好例子,
Angular.js example application By Sacha Barber, 5 Sep 2013
还挺新。2013年的。可见我又拖时代的后腿了。
在这里例子中。作者是把所有的 controllers , directives 之类统统丢到一个文件夹。 比如controllers下面就是 favs, root 这些controller。少的时候倒是蛮清楚的。
作者先在 main.js 配置文件里面,把以 requirejs 格式写的 favs controller 加载进来。而 favs,在定义的时候,会把自己加载到 总管 controllers 模块里面去。然后在 main.js 开始启动 angular 模块 app 的时候,再将总管 controllers 模块引用进来。 这样在 app 模块的子模块中就有了 favs controller。而路由配置则是在 main.js 中定义的。当 app 模块启动的时候,自然就能找到相应的 controller。
看起来不错,但是我总觉得怪怪的。比如说,追加新模块的时候,我要先在 main.js 里面配置好这个模块的 路由路径,模板路径,以及controller。在 main.js 的引用中又要加上明确的 引用声明。随着模块的增加,这个声明貌似会成长很快。比如作者在文件里面是这样注释的:
<!-- lang: js -->
'services/liveUpdatesService',
'services/imageService',
'services/localStorageService',
'controllers/rootController',
'controllers/favsController',
'directives/ngbkFocus',
'directives/draggable',
'directives/resizable',
'directives/tooltip',
'directives/colorbox'
// Any individual controller, service, directive or filter file
// that you add will need to be pulled in here.
嗯,所有的,都要在这声明。
调用顺序应该是这样: require 调用 main 配置, main 配置中调用各controller, 而各 controller 将自己加到总管 controllers 中。 启动 app 模块, app 模块声明使用总管 controllers 模块。
我觉得流程应该是这样的: require 调用 main 配置。main 中定义启动 app 模块最低限度的应用级的库。 main 中定义 app 的子模块文件夹目录。或者在 app 模块的[]中声明子模块。 启动 app 模块, app 模块自动遍历模块文件夹目录,根据模块一定格式加载模块。应用到 app 中。 在每个模块范围内,模块加载自己所需要的模块级的库。main / app 中不必过问。
桌面都是这样用的嘛。为什么web不这样做,还要经历跟桌面开发控制一样的道路然后才能进化出包的管理。