我的项目中,现在有一个问题:
<ion-tab title="首页" icon="ion-home" ui-sref="tabs.home" badge="badgenum" badge-style="badge-assertive">
<ion-nav-view name="home-tab"></ion-nav-view>
</ion-tab>
<ion-tab title="任务通知" icon="ion-chatbox-working" ui-sref="tabs.notice">
<ion-nav-view name="notice-tab"></ion-nav-view>
</ion-tab>
以上是我项目的tabs栏,其中,在home-tab
和notice-tab
中,有共用的ui-router的页面,此时我的解决办法是在templates
文件夹中写通用的界面
.state('tabs.shenheSG', {
url: '/shenheSG/:detailObj',
cache: true,
views: {
'home-tab': {
templateUrl: 'templates/tab-shenheSG.html',
controller: 'ShenheSGCtrl'
}
}
})
.state('tabs.MshenheSG', {
url: '/MshenheSG/:detailObj',
cache: true,
views: {
'notice-tab': {
templateUrl: 'templates/tab-shenheSG.html',
controller: 'ShenheSGCtrl'
}
}
})
这样就能从home-tab
和notice-tab
界面中进入tab-shenheSG.html
这个通用的界面。
但是,问题来了在tab-shenheSG.html
页面中,还会有一个三级界面tab-projectlog.html
这个三级界面,我目前写的是路由是
.state('tabs.projectlog', {
url: '/projectlog/:detailObj',
cache: true,
views: {
'home-tab': {
templateUrl: '../templates/tab-projectlog.html',
controller: 'ProjectlogCtrl'
}
}
})
注意这里的views:{'home-tab'}
,所以如果我在任务通知notice-tab
进入到tab-shenheSG.html
界面,此时在点击进入到tab-projectlog.html
,ui-router是没办法识别的,进入页面后将没有返回按钮,此时APP就不能正常走流程。
不知道我的问题描述清楚没有,请问这种办法如何解决?
我此时有一个想法,就是在写一个路由,是
views:{
'notice-tab':{
templateUrl:'../templates/tab-projectlog.html',
controller: 'ProjectlogCtrl'
}
}
然后在点击进入tab-projectlog.html
前,根据$ionicHistory
判断是由home-tab
进入的还是notice-tab
进入的,然后选择跳转不同父级路由的tab-projectlog.html
不知道我理解的对不对。。根据目前例子,你的页面由两部分组成,
home-tab
和notice-tab
。根据你的描述,
tabs.shenheSG
与tabs.MshenheSG
对应的模板一样,都是templates/tab-shenheSG.html
。它们分别都有一个相同的 “子路由” 叫tabs.projectlog
。有一些我认为前后矛盾的地方,先跟你确认下:
tabs.shenheSG
与tabs.MshenheSG
的 template 和 controller 相同,区别只是在 url 和 view。为什么不在同一个 state 以及同一个 url 下用 multiple view 来处理?tabs.shenheSG
与tabs.MshenheSG
的 URL 是必要的,你当然可以写成不同 URL。只是,我想不到什么场景下,两个不同的 state,不同的 URL 以及不同的 view 需要使用同一个 template。或许是因为你的 template 融合了太多种情况,分的不够细tabs.shenheSG.projectlog
以及tabs.MshenheSG.projectlog
。现在你这样写不是父子关系,而是平级的简单归纳一下,你现在的情况是这样:
我可能会改成这样:
这样,
MshenheSG/xxx/projectlog
就是从MshenheSG
来的,state
为tabs.MshenheSG.projectlog
,shenheSG/xxx/projectlog
就是从shenheSG
来的,state
为tabs.shenheSG.projectlog
类似于这么写:
这样你可以通过
/base/a/child
访问a
的child
。注意,定义子路由的时候,父级的 url 会被继承下来,除非你用
^
定义 url。详情看文档:https://github.com/angular-ui...