【问题标题】:ERROR Error: Uncaught (in promise), Cannot match any routes. URL SegmentERROR 错误:未捕获(在承诺中),无法匹配任何路由。网址段
【发布时间】:2019-02-01 08:53:16
【问题描述】:

我在 Angular 6 应用中有简单的导航,

这里是 HTML

<nav class="main-nav>
<ul class="main-nav__list " ng-sticky [addClass]="'main-sticky-link'" [ngClass]="ref.click === true? 'Navbar__ToggleShow' :''">
            <li class="main-nav__item">
              <a class="main-nav__link" routerLink="['/']" routerLinkActive="active">Home</a>
            </li>
            <li class="main-nav__item"> 
              <a class="main-nav__link" routerLink="['/about']" routerLinkActive="active">About us</a>
            </li>

          </ul>
</nav>

这里是 app.routing 模块

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule, Routes } from '@angular/router';
import { MainLayoutComponent } from './layout/main-layout/main-layout.component';
import { AboutComponent } from './components/about/about.component';
import { WhatwedoComponent } from './components/whatwedo/whatwedo.component';
import { FooterComponent } from './components/footer/footer.component';
import { ProjectsComponent } from './components/projects/projects.component';
const routes: Routes = [
  { path: 'about', component: AboutComponent },
  { path: 'what', component: WhatwedoComponent },
  { path: 'contacts', component: FooterComponent },
  { path: 'projects', component: ProjectsComponent},
];

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

这里是应用模块

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { NgStickyDirective } from 'ng-sticky';
import { RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
import { MainLayoutComponent } from './layout/main-layout/main-layout.component';
import { AppRoutingModule } from './/app-routing.module';
import { MainNavDirective } from './layout/main-nav.directive';
import { AboutComponent } from './components/about/about.component';
import { WhatwedoComponent } from './components/whatwedo/whatwedo.component';
import { FooterComponent } from './components/footer/footer.component';
import { WhyChooseUsComponent } from './components/why-choose-us/why-choose-us.component';
import { TeamComponent } from './components/team/team.component';
import { ProjectsComponent } from './components/projects/projects.component';
import { ClientsComponent } from './components/clients/clients.component';
import { HowItWorksComponent } from './components/how-it-works/how-it-works.component';
import { PartnersComponent } from './components/partners/partners.component';

@NgModule({
  declarations: [
    AppComponent,
    NgStickyDirective,
    MainLayoutComponent,
    MainNavDirective,
    AboutComponent,
    WhatwedoComponent,
    FooterComponent,
    WhyChooseUsComponent,
    TeamComponent,
    ProjectsComponent,
    ClientsComponent,
    HowItWorksComponent,
    PartnersComponent
  ],
  imports: [
    BrowserModule,
    RouterModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

当我运行我的应用程序并单击关于我们时,我收到以下错误:

core.js:1673 ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: '%5B'/about'%5D'
Error: Cannot match any routes. URL Segment: '%5B'/about'%5D'
    at

我尝试了不同的组合来解决这个问题,但仍然无法摆脱这个错误,

我的代码做错了什么?任何帮助都会有所帮助,谢谢

【问题讨论】:

    标签: javascript html angular typescript angular-routerlink


    【解决方案1】:

    当你像这样使用 routerLink 时,你需要传递它应该去的路由的值。但是,当您将 routerLink 与属性绑定语法一起使用时,例如:[routerLink],那么它应该被分配一个属性名称,其值将是它应该将用户导航到的路由。

    因此,要解决您的问题,请将您的 HTML 中的 routerLink="['/about']" 替换为 routerLink="/about"

    在其他地方,您在不需要时使用属性绑定语法。我已经修复了它,你可以简单地使用下面的模板语法:

    <nav class="main-nav>
      <ul 
        class="main-nav__list" 
        ng-sticky 
        addClass="main-sticky-link" 
        [ngClass]="ref.click ? 'Navbar__ToggleShow' : ''">
        <li class="main-nav__item" routerLinkActive="active">
          <a class="main-nav__link" routerLink="/">Home</a>
        </li>
        <li class="main-nav__item" routerLinkActive="active"> 
          <a class="main-nav__link" routerLink="/about">About us</a>
        </li>
      </ul>
    </nav>
    

    它还需要知道它应该在哪里加载与它到达的路由相对应的组件的模板。因此,不要忘记在上面提供的模板或父组件中添加&lt;router-outlet&gt;&lt;/router-outlet&gt;

    您的AppRoutingModule 存在另一个问题。您需要从那里导出RouterModule,以便在导入它时它对您的AppModule 可用。要解决此问题,请将其从您的 AppRoutingModule 导出,并将其添加到 exports 数组中。

    import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    import { RouterModule, Routes } from '@angular/router';
    import { MainLayoutComponent } from './layout/main-layout/main-layout.component';
    import { AboutComponent } from './components/about/about.component';
    import { WhatwedoComponent } from './components/whatwedo/whatwedo.component';
    import { FooterComponent } from './components/footer/footer.component';
    import { ProjectsComponent } from './components/projects/projects.component';
    const routes: Routes = [
      { path: 'about', component: AboutComponent },
      { path: 'what', component: WhatwedoComponent },
      { path: 'contacts', component: FooterComponent },
      { path: 'projects', component: ProjectsComponent},
    ];
    
    @NgModule({
      imports: [
        CommonModule,
        RouterModule.forRoot(routes),
      ],
      exports: [RouterModule],
      declarations: []
    })
    export class AppRoutingModule { }
    

    【讨论】:

    • Stackoverflow 设置了接受答案的时间哈哈哈,所以请耐心等待。太快了!!
    • 这解决了问题,但是当我点击我们时它什么也没做:(
    • 将鼠标悬停在链接上并检查屏幕左下角将用户导航到的位置?
    • 我解决了需要在主要布局组件中添加 router-outlet 的问题
    • 哦。好的。确保也从AppRoutingModule 导出RouterModule
    【解决方案2】:

    如果您需要 [] 语法,当您需要通过路由传递 id 之类的参数时,这对“edit forms”很有用,您可以执行以下操作:

    [routerLink]="['edit', business._id]"
    

    至于没有像你这样的参数的“关于页面”,

    [routerLink]="/about"
    

    [routerLink]=['about']
    

    会成功的。

    【讨论】:

      【解决方案3】:

      正如错误所说,您的路由器链接应与配置的现有路由匹配

      应该只是routerLink="/about"

      【讨论】:

        【解决方案4】:

        我通过搜索很多天找到了正确的答案; 只需转换 routerLink="['/jkh',id]"

        [routerLink]="['/jkh',id]"

        并给它所有的请求及其解决方案 ;

        【讨论】:

          猜你喜欢
          • 2020-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-18
          • 2019-10-14
          • 1970-01-01
          • 1970-01-01
          • 2022-06-14
          相关资源
          最近更新 更多