写点什么

AngularJS 进阶 (十四)AngularJS 路由问题分析

  • 2022-12-03
    江苏
  • 本文字数:1443 字

    阅读完需:约 5 分钟

AngularJS进阶(十四)AngularJS路由问题分析

事情原委 router_sys.js 源代码如下:



自己在 html 路由跳转的代码如下:


但是在实际路由过程中,却路由到了下面的状态,相应的页面中去。


诡异的是在 UC 上第一次路由正常,第二次还是路由到下面的状态!路由命名是没有问题的,却执行到别路由中去了。费解!


驱除内鬼内鬼一时还真找不出来。


尝试通过编写点击事件在函数内路由至所需页面,结果还是不可达。

<a class="btn btn-success btn-sm" id="butAdd" ng-click="doAdd()">新增药店</a>//路由至新增药店$scope.doAdd = function(){alert("SHQ");$state.go('SHQ');};
复制代码


提示错误如下:


Could not resolve 'SHQ' from state 'shopManag'


把路由中的 shop_set_dtl.html 页面注释掉,居然还能路由!地址居然还显示!如何是好?


这个问题已经超出了自己的能力范围,实在是没有办法!


真相大白呵呵....不要管我,让我哭会!为自己的过错哭会


原来自己写有 3 个路由分别为 router.js、router_sys.js、router.shop.js,我就纳了闷了,我说怎么该路由死活都不对呢,原来问题就出在第一个路由上。第一个路由中的路由这是自己给自己埋的一颗雷啊!雷区如下:


  //TODO(待考虑)    /*-----------------------药店详情维护------------------------*/    .state('shopDtlManag', {        url: '/shopDtlManag/',        views: { //注意这里的写法,当一个页面上带有多个ui-view的时候如何进行命名和视图模板的加载动作            '': {                templateUrl: 'sys_tpls/rightInfoList.html'            },            'sys_banner@shopDtlManag': {                templateUrl: 'sys_tpls/sys_banner.html'            },            'rightContent@shopDtlManag': {                templateUrl: 'sys_tpls/shop_set_dtl.html'            }        }    }) 
复制代码


这样就不难解释为何会出现以上灵异事件了。


将之替换为如下代码,问题迎刃而解!


    /*---------------------------新增药店-----------------------------*/    .state('shopAdd', {        url: '/shopAdd/',        views: { //注意这里的写法,当一个页面上带有多个ui-view的时候如何进行命名和视图模板的加载动作            '': {                templateUrl: 'sys_tpls/rightInfoList.html'            },            'sys_banner@shopAdd': {                templateUrl: 'sys_tpls/sys_banner.html'            },            'rightContent@shopAdd': {                templateUrl: 'sys_tpls/shop_add.html'  // 路由至新增药店页面            }        }    })
复制代码


亡羊补牢既然错误已犯,自己就要悔过了。必须得把这可盲雷拆掉!


不过看过代码,感觉这可暗雷不好拆除。当初自己是本着药店端和后台管理端可以分开登录来设计的。


当初的项目需求是实现两个管理端分别进入自己的登录界面,分别为 index_sys.html 和 index_shop.hml。而自己起初是将两者置于一起的,后来为了分离后,应对交易调用错误如何处置的情况,故保留了 index.html。


拆雷时,须将 index.html 与 router 同时拆除。


其实,经过对比发现 router_sys.js 与 router.shop.js 的唯一不同之处在于以下划红线部分代码:


$stateProvider
.state('index', {
url: '/index',
views: {
'': {
templateUrl: 'sys_tpls/home.html'
},
'sys_login@index': {
templateUrl: 'sys_tpls/sys_login.html'
}
}
})
复制代码

经过不断测试,自己必须将这颗暗雷拆除。


经过调试,查出暗雷之后,程序运行正常!╰( ̄▽ ̄)╮


发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
AngularJS进阶(十四)AngularJS路由问题分析_路由_No Silver Bullet_InfoQ写作社区