如何使用登录页面做一个延迟加载的离子框架应用程序

How to do a lazy loaded ionic framework app with a login page

我有一个运行良好的应用程序,但我想将它移到登录页面后面。各种模块都是延迟加载的,并且运行良好。但是,当我将应用程序更改为始终首先转到登录页面(我将在此处检查登录状态并在登录后重定向到该应用程序)时,我收到有关路由的错误。

应用-routing.module.ts

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

const routes: Routes = [
  { path: '', loadChildren: './login/login.module#LoginPageModule' }
  // this next line was how the app routed before I tried adding the login page
  // { path: '', loadChildren: './tabs/tabs.module#TabsPageModule' }
];
@NgModule({
  imports: [
    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
  ],
  exports: [RouterModule]
})
export class AppRoutingModule {}

login.router.module.ts

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

import { LoginPage } from './login.page';

const routes: Routes = [
    { path: '', component: LoginPage },
];

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

login.page.ts

import { ChangeDetectionStrategy, Component } from '@angular/core';
import { Router } from '@angular/router';
import { Store } from '@ngrx/store';
import { AppState } from '../_store/store/app.store';
import { filter } from 'rxjs/operators';

@Component({
    selector: 'app-login',
    templateUrl: 'login.page.html',
    styleUrls: ['login.page.scss'],
    changeDetection: ChangeDetectionStrategy.OnPush,
})
export class LoginPage {

    constructor(private router: Router, private store: Store<AppState>) {
        this.userSubscription = this.store.select(state => state.users.user).pipe(
            filter(user => !!user)
        ).subscribe(user => {
            if (user) {
                // THIS IS WHERE THE ERROR HAPPENS
                this.router.navigate(['/tabs']);
            }
        });
    }

}

this.router.navigate(['/tabs']);是错误发生的地方:

ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'tabs/behaviors' Error: Cannot match any routes. URL Segment: 'tabs/behaviors'

我确定我在这里遗漏了一些非常明显的东西。首先尝试延迟加载所有模块。我很确定我需要以某种方式在 login.page 文件或 login.router.module 中引用选项卡模块。任何帮助将不胜感激。用户状态的状态检查非常有效,我已经验证所有这些都在工作,如果找到用户,它就是它尝试导航的地方。

试试改成

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

使用此代码 this.router.navigate(['/tabs']); 您将路由到选项卡,但您没有声明它。这是针对 app.routing.ts 文件的。不明白为什么你有 login.router.ts 文件。

所以在遵循上面的建议之后,这给了我同样的错误,并且在 angular 或 ionic 的文档中没有找到任何帮助,我对我的每个路由组合进行了数小时的更改可以,终于有些东西起作用了。

这些是应用程序中的路线-routing.module.ts

{ path: 'login', loadChildren: './login/login.module#LoginPageModule' },
{ path: 'tabs', loadChildren: './tabs/tabs.module#TabsPageModule' },
{ path: '', redirectTo: 'login', pathMatch: 'full' },

这是使它起作用的更改之前的 tabs.router.module.ts:

{ path: 'tabs', component: TabsPage, children: [ .... ] },
{ path: '', redirectTo: 'tabs/behaviors', pathMatch: 'full' }

现在是这样:

{ path: '', component: TabsPage, children: [ ... ] },

就是这样。终于在浏览器中不小心输入 .com:8100/tabs/tabs/behaviors 时弄明白了。删除路径:选项卡路由模块中的 'tabs' 修复了它。 /tabs 转到选项卡路由,然后 /behaviors 是子项。我的代码在第一层和 /behavior 之间添加了第二层 /tabs。