4

我正在处理一个带有标签的项目,但它应该只在用户登录后出现。

当 app.routing.module.ts 中的路由如下时,选项卡工作得很好:

{ path: '', loadChildren: './tabs/tabs.module#TabsPageModule' }

但是当我像这样使用登录时:

{ path: '', loadChildren: './login/login.module#LoginPageModule' },
{ path: 'home', loadChildren: './tabs/tabs.module#TabsPageModule' }

它不起作用。

app.routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  { path: '', loadChildren: './login/login.module#LoginPageModule' },
  { path: 'home', loadChildren: './tabs/tabs.module#TabsPageModule' },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

tabs.routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';



const routes: Routes = [
  {
    path: 'home',
    component: TabsPage,
    children: [
      {
        path: '',
        redirectTo: '/home/(MyPlaces:MyPlaces)',
        pathMatch: 'full'
      },
      {
        path: 'MyPlaces',
        outlet: 'MyPlaces',
        loadChildren: '../MyPlaces/MyPlaces.module#MyPlacesPageModule'
      },
      {
        path: 'Messages',
        outlet: 'Messages',
        loadChildren: '../Messages/Messages.module#MessagesPageModule'
      }
    ]
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class TabsPageRoutingModule { }
4

3 回答 3

1

导入 TabsPageModule 并将其app.module.ts放到imports: [...]. 这对我有用。

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule, RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

import { TabsPageModule } from './tabs/tabs.module';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule, TabsPageModule],
  providers: [
    StatusBar,
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}
于 2018-08-31T19:16:11.737 回答
0

经过这么多尝试后,我发现这种方法至少现在永远不会那样工作,唯一可行的方法是不使用延迟加载,代码将是这样的:

app.routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { TabsPage } from './tabs/tabs.page'

const routes: Routes = [
  { path: '', loadChildren: './login/login.module#LoginPageModule' },
  { path: 'home', component: TabsPage },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { TabsPageModule } from './tabs/tabs.module';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [BrowserModule,
    IonicModule.forRoot(),
    AppRoutingModule,
    TabsPageModule
  ],
  providers: [
    StatusBar,
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

注意导入 TabsPageModule。

tabs.routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';
import { MyPlacePage } from '../MyPlaces/MyPlaces.Page';
import { MessagesPage } from '../Messages/Messages.Page';


const routes: Routes = [
  {
    path: 'home',
    component: TabsPage,
    children: [
      {
        path: '',
        redirectTo: '/home/(MyPlaces:MyPlaces)',
        pathMatch: 'full'
      },
      {
        path: 'MyPlaces',
        outlet: 'MyPlaces',
        component: MyPlacePage
      },
      {
        path: 'Messages',
        outlet: 'Messages',
        component: MessagesPage
      }
    ]
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class TabsPageRoutingModule { }

tabs.module.ts

import { IonicModule } from '@ionic/angular';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';

import { TabsPageRoutingModule } from './tabs.router.module';

import { TabsPage } from './tabs.page';
import { MyPlacesPageModule } from '../MyPlaces/MyPlaces.module';
import { MessagesPageModule } from '../Messages/Messages.module';

@NgModule({
  imports: [
    IonicModule,
    CommonModule,
    FormsModule,
    TabsPageRoutingModule,
    MyPlacesPageModule,
    MessagesPageModule
  ],
  declarations: [TabsPage]
})
export class TabsPageModule {}

另请注意,您需要使用 href 链接标签页而不是 routerLiknk。

于 2018-09-01T15:58:29.930 回答
0

我找到了一种通过延迟加载来做到这一点的方法。在包含选项卡的页面中,我们添加了一个新变量,它是一个类,并在导航更改时更新:

<ion-tabs [class]="'url' + currentUrl">

</ion-tabs>

此类在.ts文件中更新:

import {Router,Event,NavigationEnd} from '@angular/router';

@Component({
    selector: 'app-home',
    templateUrl: './home.page.html',
    styleUrls: ['./home.page.scss'],
})
export class HomePage implements OnInit {
    public notificationCount = 0;
    public currentUrl: string;

    constructor(private router: Router) {
        this.router.events.subscribe((event: Event) => {
            if (event instanceof NavigationEnd) {
                console.log('loading finished', event);
                this.currentUrl = event.url.split('/').join('-')
            }
        });
    }

通过这种方式,您可以在您的global.scss

ion-tabs {
    &.url-home-tournaments-main-play,
    &.url-home-tournaments-main-play-score {
        ion-tab-bar {
            display: none;
        }
    }
}
于 2019-09-11T09:16:47.257 回答