使用ui.router无法获取URL内容,请求技术协助
解决AngularJS + ui.router 路由跳转提示“object not found”的问题
我帮你排查了代码里的几个关键问题,这些都是用AngularJS + ui.router时很容易踩的坑,咱们一个个来修正:
1. 脚本加载顺序错误
ui.router是AngularJS的第三方插件,必须在AngularJS核心库之后加载。你当前的加载顺序是先加载ui.router,再加载AngularJS,这会导致ui.router无法找到Angular的全局对象,直接导致路由功能失效。
修正后的HTML脚本顺序:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/1.0.16/angular-ui-router.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="first.js"></script>
2. 路由URL缺少开头斜杠
定义state的url属性时,必须以/开头,否则路由会基于当前页面路径进行拼接,导致实际请求的路径不符合预期。同时建议配置默认路由,避免初始状态无匹配的问题。
修正后的JS路由配置:
var app=angular.module('myApp', ['ui.router']); app.config(function($stateProvider, $urlRouterProvider) { // 配置默认路由,防止初始状态无匹配 $urlRouterProvider.otherwise('/first'); $stateProvider.state('home', { url: '/first', // 加上开头的斜杠 templateUrl: 'msg.html' // 去掉末尾的多余空格 }); });
3. 使用ui-sref替代普通href
普通的<a href>会直接触发浏览器的页面跳转,而不会通过ui.router的状态管理机制。你需要用ui.router提供的ui-sref指令来绑定路由状态,这样才能正确触发路由切换。
修正后的HTML链接:
<a ui-sref="home">firstname</a>
4. 移除templateUrl的多余空格
你的templateUrl: 'msg.html '末尾有个空格,这会导致浏览器请求的文件名是带空格的msg.html ,而实际你的文件是msg.html,所以会出现找不到文件的错误,直接去掉空格即可。
验证修正后的效果
把以上修改全部应用后,点击firstname链接时,ui.router会正确触发home状态,加载msg.html的内容到ui-view容器里,不会再出现“object not found”的错误。
内容的提问来源于stack exchange,提问作者ronaldino
相关产品推荐
相关产品推荐

