Ответ 1
Добавить pathMatch: 'full'
{path: '', component: AppComponent, pathMatch: 'full'},
для маршрутов с пустым путём ''
и никаких дочерних маршрутов.
Я пытаюсь выполнить этот учебник http://onehungrymind.com/named-router-outlets-in-angular-2/, но я получаю сообщение об ошибке.
ИСКЛЮЧЕНИЕ: Неподготовлено (в обещании): Ошибка: не может соответствовать любым маршрутам. Сегмент URL: ошибка "клиентов": не может соответствовать любым маршрутам. Сегмент URL: "клиенты"
Вот мой Router module
import {NgModule} from "@angular/core";
import {Routes, RouterModule} from "@angular/router";
import {AppComponent} from "./app.component";
import {ClientComponent} from "./clients/client.component";
import {ClientDetailsComponent} from "./clients/client-details/client-details.component";
import {ClientListComponent} from "./clients/client-list/client-list.component";
const routes: Routes = [
{path: '', component: AppComponent},
{path: 'clients', component: ClientComponent, children: [
{path: 'list', component: ClientListComponent, outlet: 'client-list'},
{path: ':id', component: ClientDetailsComponent, outlet: 'client-details'}
]
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: []
})
export class RoutingModule {
}
App.component
export class AppComponent {
clientsLoaded = false;
constructor(private clientService: ClientService,
private router: Router) {
}
loadClientsComponent() {
this.router.navigate(['/clients', {outlets: {'client-list': ['clients'], 'client-details': ['none'], 'client-accounts-info': ['none']}}]);
this.clientsLoaded = true;
}
}
Client.component
import {Component} from "@angular/core";
import {ClientService} from "../services/client.service";
import {Router} from "@angular/router";
import {Client} from "./client-details/model/client.model";
@Component({
selector: 'clients',
templateUrl: 'app/clients/client.component.html'
})
export class ClientComponent {
clients: Array<Client> = [];
constructor(private clientService: ClientService,
private router: Router) {
}
ngOnInit() {
this.getClients().subscribe((clients) => {
this.clients = clients;
});
}
getClients() {
return this.clientService.getClients();
}
}
Что может быть неправильным? Буду признателен за любую помощь
ОБНОВИТЬ
Спасибо за совет, я пробовал что-то вроде этого
const routes: Routes = [
{path: '', component: AppComponent, pathMatch: 'full'},
{path: 'clients', component: ClientComponent, children: [
{path: '', component: ClientComponent},
{path: 'list', component: ClientListComponent, outlet: 'client-list'},
{path: ':id', component: ClientDetailsComponent, outlet: 'client-details'}
]
},
];
Но это все еще не работает.
Возможно, я делаю это неправильно, но у меня есть следующий шаблон для моего ClientComponent
<div id="sidebar" class="col-sm-3 client-sidebar">
<h2 class="sidebar__header">
Client list
</h2>
<div class="sidebar__list">
<router-outlet name="client-list"></router-outlet>
</div>
</div>
<div id="client-info" class="col-sm-4 client-info">
<div class="client-info__section client-info__section--general">
<router-outlet name="client-details"></router-outlet>
</div>
</div>
Поэтому я хочу, чтобы мой клиентский компонент сохранял все компоненты, связанные с клиентом. И если пользователь нажимает, например, кнопку, то загружается список клиентов.
Добавить pathMatch: 'full'
{path: '', component: AppComponent, pathMatch: 'full'},
для маршрутов с пустым путём ''
и никаких дочерних маршрутов.
Я интегрирую Angular 2/4 в существующее приложение MVC, и у меня тоже была эта проблема.
Используя ваш пример, если у меня был path: 'Clients'
в конфигурации маршрутизации вместо path: 'clients'
и попытались перейти на URL-адрес, например http://localhost/clients
, я бы получил эту ошибку.
Имена маршрутных маршрутов чувствительны к регистру (по крайней мере, сейчас). Они не будут соответствовать тому, что в вашем URL-адресе, и с типичным MVC-контроллером/именованием действий они являются "InitialCaps-style".
Проверьте сеанс импорта в app.module.ts и посмотрите, не пропустили ли вы маршрутизацию:
imports: [
BrowserModule,
APP_ROUTES,
AppRoutingModule
],