使用AngularJS ui-router路由时遇‘控制器未注册’错误求助
解决ui-router中“controller is not Registered(控制器未注册)”的问题
我来帮你排查这个问题,从你给出的代码来看,主要有几个关键点需要修正:
1. 未在HTML中引入控制器脚本文件
你的HTML代码里没有加载contact.js,这是最直接的原因——控制器代码都没被浏览器加载,Angular自然找不到名为abc的控制器。
修改HTML,添加contact.js的引用(注意路径要匹配实际文件位置):
<title></title> <script src="../../Scripts/angular.js"></script> <script src="../../Scripts/angular-ui-router.js"></script> <script src="Admin_MyApp.js"></script> <script src="../EmployeePages/EmployeeScripting/Employee_MyApp.js"></script> <!-- 新增控制器脚本引用 --> <script src="contact.js"></script> <ul> <li><a ui-sref="Contact">Contact</a></li> </ul>
另外补充:ui-sref的写法不需要加括号,直接写状态名Contact即可。
2. 控制器模块引用方式不严谨
你的contact.js里直接用了app.controller,但app是Admin_MyApp.js中定义的局部变量,如果脚本加载顺序发生变化(比如contact.js在Admin_MyApp.js之前加载),app会未定义,导致控制器注册失败。更稳妥的写法是直接通过模块名称获取引用:
修改contact.js代码:
// 通过模块名称获取引用,避免依赖全局变量 angular.module('Admin_MyApp').controller('abc', function ($scope) { // 你的控制器逻辑代码 });
3. 路由URL的细节优化
你的Contact状态的url没有加开头的斜杠,可能会导致路由路径拼接错误,建议修正为:
.state('Contact', { url: '/contact', // 加上开头的斜杠,保证路径解析正确 templateUrl: '/Kpmg/AdminPages/EmployeeDetails/Feedback.html', controller: 'abc' })
按照这几点修改后,控制器应该就能正常注册并被ui-router识别了。
内容的提问来源于stack exchange,提问作者user8518202
相关产品推荐
相关产品推荐

