Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时动态更改Ionic Cordova TabRoot_Cordova_Ionic Framework_Ionic3 - Fatal编程技术网

在运行时动态更改Ionic Cordova TabRoot

在运行时动态更改Ionic Cordova TabRoot,cordova,ionic-framework,ionic3,Cordova,Ionic Framework,Ionic3,我已经创建了一个离子标签应用程序 Tabs.html: <ion-tabs> <ion-tab [root]="tab1Root" tabTitle="Home" tabIcon="md-home"></ion-tab> <ion-tab [root]="tab2Root" tabTitle="About" tabIcon="md-information-circle"></ion-tab> <ion-tab [roo

我已经创建了一个离子标签应用程序

Tabs.html:

<ion-tabs>
  <ion-tab [root]="tab1Root" tabTitle="Home" tabIcon="md-home"></ion-tab>
  <ion-tab [root]="tab2Root" tabTitle="About" tabIcon="md-information-circle"></ion-tab>
  <ion-tab [root]="tab3Root" tabTitle="My Account" tabIcon="md-log-in"></ion-tab>
</ion-tabs>
我想做的是,一旦我在tab3Root(LoginPage)上登录,我想将其更改为LoggedinPage。 保持其他选项卡正常工作

可能吗?如果是,请怎么办

多谢各位

添加信息:检查/编辑此链接它包含我的代码作为示例
stackblitz.com/edit/ionic-yff2sx

只需使用setRoot方法从该选项卡调用另一个页面即可。从登录页面调用下面的方法

this.navCtrl.setRoot(this.loggedInPage);


我假设home.ts是登录页面,并从主页调用loggedIn页面。单击主页中的“转到登录页面”按钮后,登录页面内容将替换主页内容。

我猜您将提供者称为可注入类。仅将可注入类用于业务验证和HTTP请求。页面构造和页面导航应该发生在组件类上。。请使用所有文件和期望编辑您的问题

根据prithivi Raj答案,您将能够导航到该页面,但不能突出显示选项卡图标

为了做到这一点,你必须做这样的事情

 this.navCtrl.parrent.select(0);

假设您在tab3中,登录后您想导航到tab1/tab2,只需在上面的代码参数中提及索引,如
this.navCtrl.parrent.select(0)/
this.navCtrl.parrent.select(1)
;。如果您使用`this.navCtrl.setRoot(“this.loggedInPage”);它不会突出显示选项卡,这将导致用户混淆他现在处于活动状态的选项卡。

是的,您可以像从ts的数组中创建选项卡一样进行操作。当用户登录时,您必须从登录页更新选项卡。您的确切意思是什么?我尝试在登录后设置tab3Root=LoggedinPage,但如果这是你的意思,那根本没有效果。。。我认为它不起作用,因为根已设置为初始化。。。因此,在初始化后更改tab3Root是无用的。你知道怎么做吗?非常感谢。您的问题是如何在提供程序中调用
setRoot
,对吗?谢谢!!这确实有效,我已经尝试过了,问题是我正在一个可注入类中执行“登录”功能。因此,我不能使用上述方法。有没有一种方法可以从可注入类调用登录页中的函数以执行此任务?我无法从我的可注入类外部调用函数。删除了可注入类,并在组件中实现了该函数!啊,我明白了!好的,谢谢你的提示!我已将它们移动到本地ts文件(组件)。但是如果没有可注入的,我现在无法验证用户是否使用(auth.user | async)登录。当实际用户登录功能在登录页面中时,此检查在主页中进行(如果不是,则显示为来宾)。用注射式的我过去可以做到。好的,我会的!我将在这里使用我的示例。正如您可以看到的,它正在检查用户是否在LoginPage的构造函数中经过身份验证。为了让主页知道他是否经过身份验证,它需要检查loginpage函数。谢谢!是的,每次用户启动应用程序时,它都会进入登录组件,在构造函数中,您将检查用户是否已经通过身份验证。如果他已经通过身份验证,只需使用setRoot将用户导航到同一选项卡中的其他页面。如果您担心登录页面在身份验证之前会显示一段时间,请设置一些条件以隐藏页面,直到身份验证块完成,或者显示一些加载图标,直到身份验证完成。
 this.navCtrl.parrent.select(0);