I have the same problem, always get this error. what caused the problem?Thank you all!
core.js:15714 ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'app/tabs’
Error: Cannot match any routes. URL Segment: 'app/tabs’
at ApplyRedirects.push…/node_modules/@angular/router/fesm5/router.js.ApplyRedirects.noMatchError (router.js:2469)
at CatchSubscriber.selector (router.js:2450)
at CatchSubscriber.push…/node_modules/rxjs/_esm5/internal/operators/catchError.js.CatchSubscriber.error (catchError.js:34)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:80)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:60)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:80)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:60)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._error (Subscriber.js:80)
at MapSubscriber.push…/node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.error (Subscriber.js:60)
at TapSubscriber.push…/node_modules/rxjs/_esm5/internal/operators/tap.js.TapSubscriber._error (tap.js:61)
at resolvePromise (zone.js:831)
at resolvePromise (zone.js:788)
at zone.js:892
at ZoneDelegate.push…/node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:17280)
at ZoneDelegate.push…/node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
at Zone.push…/node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
at drainMicroTaskQueue (zone.js:601)
at ZoneTask.push…/node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:502)
at invokeTask (zone.js:1744)
and login.html is
<ion-header>
<ion-toolbar>
<ion-buttons slot="start">
<ion-back-button></ion-back-button>
</ion-buttons>
<ion-title>Login</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding >
<ion-card>
<ion-item>
<ion-label position="floating" >Account</ion-label>
<ion-input clearInput="true" required="true" type="email" [(ngModel)]="userLogin.email"></ion-input>
</ion-item>
<ion-item>
<ion-label position="floating">Password</ion-label>
<ion-input clearInput="true" required="true" type="password" minlength = 6 [(ngModel)]="userLogin.password"></ion-input>
</ion-item>
<ion-item>
<ion-button class="loginButton" color="primary" expand="full" size="medium" shape="round" (click)="login()" >
<ion-ripple-effect></ion-ripple-effect>
<ion-icon slot="start" name="star"></ion-icon>
login</ion-button>
</ion-item>
<ion-item >
<ion-badge color="secondary" slot="start" (click)="goAccountForRegister()"> <ion-icon slot="start" name="star"></ion-icon>new account</ion-badge>
<ion-badge color="secondary" slot="end">forgot password</ion-badge>
</ion-item>
</ion-card>
</ion-content>
and login.module.ts is
import { Component, OnInit } from '@angular/core';
import {BasePage} from '../../base/base.page';
import {BaseInterceptor} from '../../http-interceptors/base-interceptor';
import {AuthService} from '../../services/auth.service';
import {ActivatedRoute, Router} from '@angular/router';
import {LoadingController, NavController, ToastController} from '@ionic/angular';
import {HttpClient} from '@angular/common/http';
import {applyRedirects} from '@angular/router/src/apply_redirects';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
styleUrls: ['./login.page.scss'],
})
export class LoginPage extends BasePage implements OnInit {
private userLogin = {email: 'hubaokun@gmail.com', password : '123321'}
constructor(public auth: AuthService,
public router: Router,
public nav: NavController,
public loadingController: LoadingController,
public toastController: ToastController,
public http: HttpClient) {
// @ts-ignore
super(router,
nav,
loadingController,
toastController,
http);
}
ngOnInit() {
}
async login() {
this.presentLoading();
this.http.post('/api/iv1/user/login', this.userLogin).subscribe(
(result) => {
this.presentToast('login successfully!');
console.log(result);
// BaseInterceptor.auth = result;
this.auth.saveAuth(result);
// this.nav.navigateForward('/account'); // It can navigate to a single page, but not tabs
this.router.navigateByUrl('/app/tabs/(tab1:tab1)');
// this.router.navigate(['/tabs/tab1']);
},
err => {
this.presentToast('login failed!');
},
() => {
console.log('it`s over');
}
);
}
goAccountForRegister() {
this.nav.navigateForward('/account');
}
}
and the tabs.router.module.ts is
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';
const routes: Routes = [
{
path: 'tabs',
component: TabsPage,
children: [
{
path: 'tab1',
children: [
{
path: '',
loadChildren: '../tab1/tab1.module#Tab1PageModule'
}
]
},
{
path: 'tab2',
children: [
{
path: '',
loadChildren: '../tab2/tab2.module#Tab2PageModule'
}
]
},
{
path: 'setting',
children: [
{
path: '',
loadChildren: '../setting/setting.module#SettingPageModule'
}
]
},
{
path: '',
redirectTo: '/tabs/tab1',
pathMatch: 'full'
}
]
},
{
path: '',
redirectTo: '/tabs/setting',
pathMatch: 'full'
}
];
@NgModule({
imports: [
RouterModule.forChild(routes)
],
exports: [RouterModule]
})
export class TabsPageRoutingModule {}
app-routing.module.ts is
import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
import {TabsPage} from './tabs/tabs.page';
const routes: Routes = [
{ path: 'base', loadChildren: './base/base.module#BasePageModule' },
{ path: 'setting', loadChildren: './setting/setting.module#SettingPageModule' },
{ path: 'login', loadChildren: './account/login/login.module#LoginPageModule' },
{ path: 'register/:account/:code', loadChildren: './account/register/register.module#RegisterPageModule' },
{ path: 'account', loadChildren: './account/account/account.module#AccountPageModule' },
{ path: 'forget-password', loadChildren: './account/forget-password/forget-password.module#ForgetPasswordPageModule' },
{ path: '',
redirectTo: '/login',
pathMatch: 'full'
},
{ path: 'app', loadChildren: './tabs/tabs.module#TabsPageModule' }
];
@NgModule({
imports: [
RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
],
exports: [RouterModule]
})
export class AppRoutingModule {
}
and the basePage is
import { Component, OnInit } from '@angular/core';
import {Router, ActivatedRoute} from '@angular/router';
import {LoadingController, NavController, ToastController} from '@ionic/angular';
import { HttpClient } from '@angular/common/http';
import {AuthService } from '../services/auth.service';
@Component({
selector: 'app-base',
templateUrl: './base.page.html',
styleUrls: ['./base.page.scss'],
})
export class BasePage implements OnInit {
constructor(public router: Router,
public nav: NavController,
public loadingController: LoadingController,
public toastController: ToastController,
public http: HttpClient) {
}
ngOnInit() {
}
async presentLoading() {
const loading = await this.loadingController.create({
message: 'Hellooo',
duration: 2000
});
await loading.present();
const { role, data } = await loading.onDidDismiss();
console.log('Loading dismissed!');
}
async presentLoadingWithOptions() {
const loading = await this.loadingController.create({
spinner: null,
duration: 5000,
message: 'Please wait...',
translucent: true,
cssClass: 'custom-class custom-loading'
});
return await loading.present();
}
async presentToast(message: string) {
const toast = await this.toastController.create({
message: message,
duration: 2000
});
toast.present();
}
async presentToastWithOptions(message: string) {
const toast = await this.toastController.create({
message: message,
showCloseButton: true,
position: 'top',
closeButtonText: 'Done'
});
toast.present();
}
}