ionic踩坑

1. tab+NavController

使用tab组件,执行页面跳转后,新页面仍然会包含tab,很多时候我们希望退出tab到新的页面。这里我们不能直接使用

this.navCtrl.push(SomePage);

而要用

this.app.getRootNav().push(SomePage);

2. 删除历史记录

比如我们完成登录以后进入首页,用户操作后退按钮时,我们不希望还能回溯到登录页,这时候需要删除登录页的历史记录。这时,我们只需要添加以下代码:

        //前往首页
        this.navCtrl.push(HomePage, {
        })
        .then(() => {
          const startIndex = this.navCtrl.getActive().index - 1;
          console.log(startIndex)
          this.navCtrl.remove(startIndex, 1);
        });

3. 跨页面数据通信

主要使用事件机制。比如假设接口返回登录态失效,我们需要跳转到登录页。但由于已经把http相关功能抽象到专门的网络接口处理模块了,而作为一个Injectable模块不能直接处理NavController的跳转,否则会报错,这主要是为了保证数据层和具体处理逻辑的分离。这时候我们使用事件的方式来进行通知:

 import { Events } from 'ionic-angular';
 @Injectable()
 export class HttpService { 
      ...
      private event: Event,
      ...
 }
 this.events.publish('token:expired', Date.now());

然后在具体的业务页面接收事件并作出相应处理:

    constructor(public navCtrl: NavController,
        public events: Events,
        public app: App,
        public navParams: NavParams)  {
        events.subscribe('token:expired', (timestamp)=>{
            this.navCtrl.push(LoginPage);
        })
    }

值得注意的是,这里不需要在每个页面添加这个逻辑,否则会跳转多次,也就是说事件会向所有页面广播。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,833评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,778评论 4 61
  • 01 花的芬芳,雨的朦胧,叶的青翠,云的舒卷,在思念的季节里,留下一脉清澈。微风拂过,可曾看见我们眼中的神...
    一席之言阅读 1,652评论 0 1
  • 不敢对你表白 己经错过了春天 只是 你 己深镌我心
    金剑书生阅读 921评论 0 0
  • 像我这样的单身VIP早已习惯了夜晚的孤独,像我这样一无所有又时刻梦想着成功渴望着暴富的人,根本不会给自己无聊...
    不说再见的机器猫阅读 3,247评论 2 1

友情链接更多精彩内容