我最近将我的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观察者)。
有没有办法绕过这个?