Ionic3深度链接问题:控制器被加载两次

时间:2017-07-12 11:27:02

标签: angularjs ionic-framework ionic2 ionic3 ionic-native

我最近将我的Ionic 2项目更新为版本3.除了深层链接部分外,一切都按预期工作。

我使用Ionic提供的分割窗格,因此我有一个分割窗格服务,用于管理导航堆栈。在家庭控制器中,我订阅了这项服务,并相应地调用我的视图孩子的setRoot()或push():

    this.rootSubjectSubscription = this.splitPaneService.rootSubject$.subscribe((pageWithContext: PageWithContext) => {
      console.info(`Displaying ${JSON.stringify(pageWithContext)} with setRoot`);
      console.info('tester:', pageWithContext.page.name);
      this.contentCtrl.setRoot(pageWithContext.page, pageWithContext.data);
    });

    this.pushSubjectSubscription = this.splitPaneService.pushSubject$.subscribe((pageWithContext: PageWithContext) => {
      console.info(`Displaying ${JSON.stringify(pageWithContext)} with Push`);
      this.contentCtrl.push(pageWithContext.page, pageWithContext.data);
    });

当我导航到根应用页面(http://localhost:9999)时,没有问题。

但是,当我直接导航到主页的链接(http://localhost:9999/#/nav/n4/home)时,家庭控制器会加载两次。这会生成两个订阅和错误,因为setRoot被调用两次。

我认为这是因为在我的app.component.ts中,我有以下代码:

import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';

import { AuthService } from '../providers/auth-service';

@Component({
  templateUrl: 'app.html'
})
export class Switchboard {
  rootPage: any;

  constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, private _auth: AuthService) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
      splashScreen.hide();
    });

    const authObserver = _auth.subscribe((state) => {
      console.info(this.rootPage);
      if (state) {
        this.rootPage = 'home';
      } else {
        this.rootPage = 'auth';
      }
    });
  }
}

在auth观察者中,如果用户已登录,我将导航到主页(这是预期的行为)。某种程度上,当我直接导航到主页时,该控制器被加载两次(由深度链接提供者和auth观察者)。

有没有办法绕过这个?

0 个答案:

没有答案