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

查看:233
本文介绍了angular.js - 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')之外的方法,页面有点多,懒得改了。。。

解决方案

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

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

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

这篇关于angular.js - angularjs ui-router 路由嵌套问题:如何阻止子页面再次运行父页面的Controller?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆