Angular 5 routerLink работает некорректно

Есть один модуль, который содержит все компоненты, и один модуль маршрута.

Модуль маршрутизации:

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { UserComponent } from './user/user.component';
import { AdminComponent } from './admin/admin.component';
import { AdminDishesComponent } from './admin/adminDishes/adminDishes.component';
import { AdminCategoriesComponent } from './admin/adminCategories/adminCategories.component';

const appRoutes: Routes = [
  {
    path: '',
    pathMatch: 'full',
    redirectTo: 'user'
  },
  {
    path: 'user',
    component: UserComponent
  },
  {
    path: 'admin',
    component: AdminComponent,
    children: [
      {
        path: 'dishes',
        component: AdminDishesComponent
      },
      {
        path: 'categories',
        component: AdminCategoriesComponent
      }
    ]
  }
];

@NgModule({
  imports: [
    RouterModule.forRoot(appRoutes)
  ],
  declarations: [],
  exports: [
    RouterModule
  ]
})

export class RoutingModule { }

Корневой компонент:

<a routerLink="/admin">Admin control panel</a>
<router-outlet></router-outlet>

Компонент администратора:

<ul id="leftMenu">
  <li><a routerLink="/dishes">Dishes</a></li>
  <li><a routerLink="/categories">Categories</a></li>
</ul>
<div id="adminContent">
  <router-outlet></router-outlet>
</div>

Пожалуйста

Ссылки должны быть такими:

http://localhost:4200/admin/categories

Но Angular дайте мне ссылку:

http://localhost:4200/categories

Если я ввожу в адресную строку нужный мне адрес, все работает.


person Letsak    schedule 20.03.2018    source источник
comment
Удалите / из routerLinks в административном компоненте   -  person Jota.Toledo    schedule 21.03.2018
comment
Я бы рекомендовал пробежать через angular.io/guide/router, особенно по абсолютным и относительным ссылкам.   -  person jonrsharpe    schedule 21.03.2018
comment
а также поддерживать 1 роутер-розетку.   -  person Basavaraj Bhusani    schedule 21.03.2018


Ответы (1)


Так что это простая ошибка ..

Существует два типа путей: относительные пути и абсолютные пути.

поэтому абсолютный путь выглядит так: /admin/categories обратите внимание на / в начале, что означает, что он будет начинать путь с корневого пути, который указан в вашем index.html как <base href="/">

теперь относительный путь categories просто добавит его к текущему пути, поэтому, если вы на http://localhost:4200/admin и нажмете routerLink с помощью categories, вы перейдете к http://localhost:4200/admin/categories, чего вы здесь и пытаетесь достичь .

так что просто удали / вот так ... <a routerLink="dishes">dishes</a>

или, если хотите, можете использовать абсолютный путь .. <a routerLink="/admin/dishes">dishes</a>

person Smokey Dawson    schedule 20.03.2018
comment
Я понял. Спасибо! - person Letsak; 21.03.2018