AngularJS报错[$controller:ctrlreg]:控制器'userlogint'未注册求助
userlogint未注册错误的思路 嘿,我之前碰到过几乎一模一样的情况——其他控制器都正常跑,唯独新写的登录控制器报[$controller:ctrlreg]错误,咱们一步步来揪出问题:
先核对控制器的注册语法
确保你在Angular模块里的注册代码没有拼写或语法错误,比如:// 正确的注册示例 angular.module('yourAppModule') .controller('userlogint', function($scope, $http) { // 你的登录逻辑代码 });特别注意名字的大小写!Angular对控制器名称是大小写敏感的,别把
userlogint写成userLoginT或者其他变体。确认控制器文件被正确引入
检查你的HTML页面里,有没有通过<script>标签加载这个控制器的JS文件,而且要保证它在Angular主模块文件之后加载:<!-- 先加载主模块文件 --> <script src="app.js"></script> <!-- 再加载登录控制器文件 --> <script src="controllers/userlogint.controller.js"></script>如果你用了Webpack、Gulp这类打包工具,还要确认这个控制器文件已经被加入到打包流程里,没被遗漏。
检查视图中的控制器引用
看看你在HTML视图里调用控制器的地方,名称是不是完全匹配:<!-- ng-controller指令的引用 --> <div ng-controller="userlogint"> <!-- 登录表单内容 --> </div>要是用路由配置的话,也要确认路由里的
controller属性值正确:.when('/login', { templateUrl: 'views/login.html', controller: 'userlogint' // 这里的名字必须和注册时完全一致 });排查模块依赖问题
如果你把这个登录控制器注册在了子模块里,一定要确保主模块已经依赖了这个子模块:// 子模块定义 angular.module('authControllers', []) .controller('userlogint', function() {}); // 主模块必须依赖子模块 angular.module('yourAppModule', ['authControllers']);漏加这个依赖的话,Angular根本找不到子模块里的控制器。
排除重名冲突
虽然概率不高,但可以检查下项目里有没有其他控制器也叫userlogint——同名的控制器会被覆盖,导致你调用的不是新写的那个。强制刷新浏览器缓存
有时候浏览器会缓存旧的JS文件,新的控制器代码根本没被加载。试试按Ctrl+Shift+R强制刷新页面,或者直接清空浏览器缓存再测试。
你可以按照这些步骤逐一排查,毕竟其他控制器都正常运行,说明Angular的核心配置没问题,大概率是这个新控制器在注册、引用或加载环节出了小疏漏。
内容的提问来源于stack exchange,提问作者user2930939

