You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS项目:如何为不同控制器创建独立文件夹?

搞定AngularJS拆分控制器后的[$injector:modulerr]错误

嘿,这个错误我太熟了!拆分模块到独立文件夹时,大多是踩了几个常见的小坑,咱们一步步捋清楚:

1. 先检查脚本加载顺序!

Angular的核心库必须第一个加载,然后是你的主模块文件(app.js),最后才是各个控制器的文件。顺序错了的话,控制器找不到要注册的主模块,直接就炸了。举个正确的例子:

<!-- 第一步:加载Angular核心 -->
<script src="angular.min.js"></script>
<!-- 第二步:加载你的主模块定义 -->
<script src="app.js"></script>
<!-- 第三步:加载各个控制器文件 -->
<script src="controllers/DashboardController.js"></script>
<script src="controllers/ProfileController.js"></script>

2. 别把控制器注册到错的模块上

你的主模块是scotchApp对吧?那每个控制器都得注册到已存在的这个模块上,不能重新创建模块。比如:
// app.js里的主模块定义(正确写法)

// 这里创建scotchApp模块,第二个空数组是依赖项
var scotchApp = angular.module('scotchApp', []);

// 控制器文件(比如controllers/DashboardController.js)的正确写法

// 注意!这里不要加第二个参数,加了就会重新创建模块,覆盖原来的
scotchApp.controller('DashboardController', function($scope) {
  // 你的控制器逻辑
});

要是控制器里写成angular.module('scotchApp', []),等于重新建了个空模块,原来的配置全丢了,肯定报错。

3. 路径别写错!

拆分到文件夹后,最容易犯的就是路径错误。打开浏览器F12的Network标签,看看控制器文件是不是404了。比如你的控制器在controllers文件夹下,HTML里得这么引:

<script src="controllers/DashboardController.js"></script>

如果是项目根目录下的app/controllers,那就要写成src="app/controllers/DashboardController.js",别偷懒。

4. 模块依赖没漏加吧?

如果你的控制器用到了别的模块(比如ngRoute、自定义服务),主模块必须声明这些依赖。比如用路由的话,app.js得这么写:

var scotchApp = angular.module('scotchApp', ['ngRoute']);

同时别忘了加载对应的依赖库,比如angular-route.min.js,不然也会报错。

5. 压缩安全的写法要注意

如果你的代码以后要压缩,千万别用普通的匿名函数写控制器,不然压缩后参数名被改掉,Angular就找不到对应的服务了。推荐两种写法:
// 数组式注入

scotchApp.controller('ProfileController', ['$scope', '$http', function($scope, $http) {
  // 逻辑代码
}]);

// 或者用$inject属性

var ProfileController = function($scope, $http) {
  // 逻辑代码
};
ProfileController.$inject = ['$scope', '$http'];
scotchApp.controller('ProfileController', ProfileController);

按这几步排查下来,基本就能解决这个模块注入错误了。

内容的提问来源于stack exchange,提问作者TheUnKnown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:20:27