Ошибка: нечистота (в обещании): Ошибка: не может соответствовать любым маршрутам Angular 2
Error
Я использую вложенную маршрутизацию в своем приложении. когда приложение загружает свой экран входа в систему после входа в систему, переадресовывает его на страницу администрирования, где существуют дополнительные дочерние маршруты, такие как user, product, api и т.д., когда я перехожу к администратору, он byddefault загружает пользовательский экран, но далее <routeLinks>
не работает, и его показывает эту ошибку,
Error: Uncaught (in promise): Error: Cannot match any routes: 'product'
![введите описание изображения здесь]()
После щелчка продукта он показывает это
![введите описание изображения здесь]()
Код main.ts
import { bootstrap } from '@angular/platform-browser-dynamic';
import { APP_ROUTER_PROVIDERS } from '../app/app.routes';
import { AppComponent } from '../app/app.component';
bootstrap(AppComponent, [APP_ROUTER_PROVIDERS]);
app.component
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';
@Component({
selector: 'demo-app',
template: `
<div class="outer-outlet">
<router-outlet></router-outlet>
</div>
`,
directives: [ROUTER_DIRECTIVES]
})
export class AppComponent { }
app.routes
import { provideRouter, RouterConfig } from '@angular/router';
import { AboutComponent, AboutHomeComponent, AboutItemComponent } from '../app/about.component';
import { HomeComponent } from '../app/home.component';
export const routes: RouterConfig = [
{
path: '',
component: HomeComponent
},
{
path: 'admin',
component: AboutComponent,
children: [
{
path: '',
component: AboutHomeComponent
},
{
path: '/product',
component: AboutItemComponent
}
]
}
];
export const APP_ROUTER_PROVIDERS = [
provideRouter(routes)
];
home.component
import { Component } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl:'../app/layouts/login.html'
})
export class HomeComponent { }
about.component
import { Component } from '@angular/core';
import { ActivatedRoute, ROUTER_DIRECTIVES } from '@angular/router';
@Component({
selector: 'about-home',
template: `<h3>user</h3>`
})
export class AboutHomeComponent { }
@Component({
selector: 'about-item',
template: `<h3>product</h3>`
})
export class AboutItemComponent { }
@Component({
selector: 'app-about',
templateUrl: '../app/layouts/admin.html',
directives: [ROUTER_DIRECTIVES]
})
export class AboutComponent { }
Ответы
Ответ 1
Я думаю, что ваша ошибка в том, что ваш маршрут должен быть product
вместо /product
.
Значит, что-то вроде
children: [
{
path: '',
component: AboutHomeComponent
},
{
path: 'product',
component: AboutItemComponent
}
Ответ 2
Для меня это работало, как код ниже. Я сделал разницу между RouterModule.forRoot
и RouterModule.forChild
. Затем в потомке определите родительский путь, а в массиве children - childs.
родитель-routing.module.ts
RouterModule.forRoot([
{
path: 'parent', //parent path, define the component that you imported earlier..
component: ParentComponent,
}
]),
RouterModule.forChild([
{
path: 'parent', //parent path
children: [
{
path: '',
redirectTo: '/parent/childs', //full child path
pathMatch: 'full'
},
{
path: 'childs',
component: ParentChildsComponent,
},
]
}
])
Надеюсь, что это поможет.
Ответ 3
Я использую angular 4 и сталкиваюсь с тем же вопросом, все возможные решения, но, наконец, это решает мою проблему
export class AppRoutingModule {
constructor(private router: Router) {
this.router.errorHandler = (error: any) => {
this.router.navigate(['404']); // or redirect to default route
}
}
}
Надеюсь, это поможет вам.
Ответ 4
У меня возникла проблема, когда импорт для модуля маршрутизации должен идти после дочернего модуля, возможно, это не имеет прямого отношения к этому сообщению, но это помогло бы мне, если бы я прочитал это:
https://angular.io/guide/router#module-import-order-matters
imports: [
BrowserModule,
FormsModule,
ChildModule,
AppRoutingModule
],
Ответ 5
Мне пришлось использовать шаблон подстановки в конце массива маршрутов.
{ path: '**', redirectTo: 'home' }
И ошибка была решена.
Ответ 6
У меня была такая же ошибка, когда я делал приложение AngularJS. Я не видел никаких ошибок с моего терминала
, но когда я отлаживаю инструмент разработчика Google, у меня есть эта ошибка
.
После этой ошибки я сначала рассмотрел мой модуль маршрутизации, так как я ничего не видел при запросе локального хоста/входа.
Я узнал, что я ошибся с логином как lgin
, и когда я его исправляю, он отлично работает. Я просто рассказываю об этом просто, чтобы обратить внимание на любую опечатку, с которой мы могли столкнуться, и поставив нас в отличное время!
![после исправления ошибки опечатки]()
Ответ 7
Если вы передаете идентификатор, попробуйте использовать этот метод
const routes: Routes = [
{path:"", redirectTo:"/home", pathMatch:"full"},
{path:"home", component:HomeComponent},
{path:"add", component:AddComponent},
{path:"edit/:id", component:EditComponent},
{path:"show/:id", component:ShowComponent}
];
@NgModule({
imports: [
CommonModule,
RouterModule.forRoot(routes)
],
exports: [RouterModule],
declarations: []
})
export class AppRoutingModule { }
Ответ 8
Если вы передаете id по URL-адресу, пожалуйста, используйте ниже
imports: [
BrowserModule,
FormsModule,
HttpModule,
RouterModule.forRoot([
{ path: 'Employees', component: EmployeesComponent, pathMatch: 'full' },
{ path: 'Add', component: EmployeeAddComponent, pathMatch: 'full' },
**{ path: 'Edit/:id', component: EmployeeEditComponent },
{ path: 'Edit', component: EmployeeEditComponent },**
{ path: '', redirectTo: 'Employees', pathMatch: 'full' }
]),
],
i.e Если вы передаете любой идентификатор, нам нужно как изменить url с помощью id, так и изменить URL-адрес.
Ответ 9
Что касается меня resetConfig
работает только
this.router.resetConfig(newRoutes);
Или согласиться с предыдущим
this.router.resetConfig([...newRoutes, ...this.router.config]);
Но имейте в виду, что последним всегда должен быть маршрут с путём **
Ответ 10
У меня тоже была такая же проблема. Пробовал все способы, и это не сработало, пока я не добавил следующее в app.module.ts
import { Ng4LoadingSpinnerModule } from 'ng4-loading-spinner';
Добавьте в свой импорт в app.module.ts следующее:
Ng4LoadingSpinnerModule.forRoot()
Этот случай может быть редок, но я надеюсь, что это поможет кому-то
Ответ 11
В моем случае iframe
с ограничением src
пытался получить host/null (когда значение связанной переменной было нулевым).
Добавление *ngIf
к нему помогло.
Я изменил:
<iframe [src]="iframeSource"></iframe>
в
<iframe [src]="iframeSource" *ngIf="iframeSource"></iframe>
Ответ 12
Это может быть полезно:
//I personally prefer dynamic import (angular 8)
{ path: 'pages', loadChildren: () => import('./pages/pages.module').then(mod => mod.PageModule) }
В дочерней маршрутизации это должно выглядеть так: { path: 'about', component: AboutComponent },
Обратите внимание, что в пути дочерней маршрутизации нет pages
, а в routerLink
или nsRouterLink
он должен выглядеть как routerLink="/pages/about"
Я надеюсь, что это поможет кому-то там.
Ответ 13
если это случается с кем-то, кто сейчас находится в angular 8, я удаляю ошибку, добавляя "/" перед маршрутом, и она работает как требуется.