Я не вижу никаких путей в браузере в своем приложении angular

#angular #typescript

Вопрос:

В чем может быть причина того, что я не вижу никаких путей в браузере, а только localhost:4200 . Но я могу нормально перемещаться по приложению. Мой routing.ts выглядит так.

Я использую Angular 12

 import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { DashboardComponent } from './dashboard/dashboard.component';
import { VacComponent } from './modules/vac/vac.component';
import { VibComponent } from './modules/vib/vib.component';
import { CatComponent } from './modules/cat/cat.component';
import { LoginComponent } from './login/login.component';

const routes: Routes = [
  { path: '', redirectTo: 'login'},
  {
    path: 'login',
    component: LoginComponent
  },
  {
    path: 'dashboard',
    component: DashboardComponent,
    // canActivate: [AuthGuard]
  },
  {
    path: 'vac',
    component: VacComponent,
    loadChildren: () => import('./modules/vac/vac.module').then(m => m.VacModule),
    // canActivate: [AuthGuard]
  },
  {
    path: 'vib',
    component: VibComponent,
    loadChildren: () => import('./modules/vib/vib.module').then(m => m.VibModule),
    // canActivate: [AuthGuard]
  },
  {
    path: 'cat',
    component: CatComponent,
    loadChildren: () => import('./modules/cat/cat.module').then(m => m.CatModule),
    // canActivate: [AuthGuard]
  },
];

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

Ответ №1:

Я попытался воспроизвести вашу ошибку в Стекблитце, но безуспешно. Вот ссылка. Что мне показалось странным в вашем примере, так это то, что вы не указали соответствие пути к вашему первому перенаправлению. Я думаю, что в этом может быть проблема.

Ответ №2:

По умолчанию компилятор Angular сопоставляет маршруты по префиксу. Поэтому маршрут { path: '', redirectTo: 'login'} будет соответствовать всем последующим маршрутам в routes массиве.

Кроме того , поскольку стратегия сопоставления маршрутов по умолчанию установлена на prefix , что в основном указывает на то, что Угловой Router будет прокладывать маршрут на основе пути, совпадающего с префиксом URL, по которому вы переходите. И поскольку каждый путь начинается с «все перенаправления», пользователь переходит к /login компоненту.

Поэтому, чтобы решить эту проблему, вам необходимо явно изменить стратегию сопоставления маршрутов на full .

 const routes: Routes = [{
    path: '',
    redirectTo: '/login',
    pathMatch: 'full'
  },
  ...,
  ...,

];
 

Как pathMatch: full указывает на то, что для маршрутизации углового маршрутизатора пользователю необходимо сопоставить весь путь URL-адреса, чтобы перенаправить пользователя по указанному пути.

Или,

Переместите определение маршрута в pathMatch: prefix нижнюю часть routes массива, как показано в следующем фрагменте.

 const routes: Routes = [
  ...,
  ...,
  ...,

  {
    path: '',
    redirectTo: '/login',
    pathMatch: 'prefix'
  }

]
 

Комментарии:

1. Эй, спасибо за ваш ответ. проверено с помощью pathMatch: «полный» и «префикс». Но проблема все еще существует. Также протестировано в Firefox, Safari и Chromium.

2. Не могли бы вы подтвердить, используете ли вы skipLocationChange свойство в navigate методе класса Router или нет? Спасибо.

3. я просочился через свой проект и не нашел свойство skipLocationChange