angularjs ui-router 路由嵌套问题:如何阻止子页面再次运行父页面的Controller?
A
页面有三个子页面a
,b
,c
作为三个tab;
其他页面跳到A
页面时,默认会先跳到a
;
我的实现如下
//其他页面
$state.go('A')
// A页面
function Ctrl($state){
// ...
this.$onInit = function(){
// ...
$state.go('A.a')
console.log('init') // 这句会输出两次
}
}
问题就是$state.go('A.a')
之后,还会执行一次Ctrl,请问如何避免跳到子路由时再执行Ctrl
补充: 除了修改其他页面的跳转为$state.go('A.a')
之外的方法,页面有点多,懒得改了。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果你用的是ui-router 1.0.* 的版本的话,可以在路由
A
的配置文件的stateObject中增加一个redirectTo
字段,其意义指的是当跳转到当前路由后,自动重定向到xx路由,比如你这里就可以这么写:这样就可以省掉你将其他页面所有跳转改为
$state.go('A.a')
的工作量了,同时这个属性还支持参数、promise等格式,可以满足动态重定向的逻辑,具体可以参照官方文档。我个人觉得第一层的路由到A已经够了,太多的子路由很复杂,在controller里面为什么不用compile来控制tab-content呢,这种方法比较容易控制,过多的依赖ui-router,感觉很容易脱离控制或出bug