angularjs ui-router 路由嵌套问题:如何阻止子页面再次运行父页面的Controller?

发布于 2022-09-05 04:28:39 字数 541 浏览 16 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迟到的我 2022-09-12 04:28:39

如果你用的是ui-router 1.0.* 的版本的话,可以在路由A的配置文件的stateObject中增加一个redirectTo字段,其意义指的是当跳转到当前路由后,自动重定向到xx路由,比如你这里就可以这么写:

{
name: 'A,
redirectTo: 'A.a'
...
}

这样就可以省掉你将其他页面所有跳转改为$state.go('A.a')的工作量了,同时这个属性还支持参数、promise等格式,可以满足动态重定向的逻辑,具体可以参照官方文档

画骨成沙 2022-09-12 04:28:39

我个人觉得第一层的路由到A已经够了,太多的子路由很复杂,在controller里面为什么不用compile来控制tab-content呢,这种方法比较容易控制,过多的依赖ui-router,感觉很容易脱离控制或出bug

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文