【问题标题】:Can't navigate with Nested Routes - angular2.rc3无法使用嵌套路由导航 - angular2.rc3
【发布时间】:2016-06-26 06:44:31
【问题描述】:

我无法通过使用新路由器配置 嵌套路由 进行导航。我收到错误 “错误:未捕获(承诺):错误:无法匹配任何路线:'todos'”。我不知道我哪里出错了。谁能帮我解决这个问题?提前致谢。

【问题讨论】:

  • 我为它创建了一个plunker。请对此进行调查。

标签: angular angular2-routing


【解决方案1】:

1) 在您的主启动应用程序中添加如下内容:

<...>
import { PLATFORM_DIRECTIVES } from '@angular/core';
<...>
bootstrap( <...>
    , [APP_ROUTER_PROVIDERS , <...> ]);
<...>

2) 然后定义您的应用程序路由并将它们导出到一个变量 APP_ROUTER_PROVIDERS 中,例如(首先您需要导入所有必要的组件 - 并看到您有几种方法来定义它们):

import { provideRouter, RouterConfig } from '@angular/router';
<...>
export const routes: RouterConfig = [
   { path: 'comp1', component: Component1 },
   ...Component1Routes, //if you want to have this in a separate file
   {
       path: 'comp2',
       component: Component2,
       'children': [
           { path: '', component: comp2 },
           { path: 'new', component: comp2new },
           { path: 'edit/:id', component: comp2edit }
        ]
    }
];
<...>
export const APP_ROUTER_PROVIDERS = [
    provideRouter(
        routes
        //, { enableTracing: true }
    )
];
...  

3) 您还需要在顶层组件中添加路由器指令:

import { ROUTER_DIRECTIVES } from '@angular/router';

4) 在任何子组件中,您都应该包含 Router 和 ActivatedRoute :

import { Router, ActivatedRoute } from '@angular/router';

5) 在视图中,您可以使用以下命令添加链接:

<a [routerLink]="['comp1']"> Comp 1</a>

您可以在此处找到一个运行示例:http://embed.plnkr.co/ER0tf8fpGHZiuVWB7Q07/http://plnkr.co/edit/Zd0qmavTzedtimImAgfQ?p=preview

希望对你有帮助

【讨论】:

  • 我已经更新了我的 plunker。现在它显示了一些其他错误。我无法查看您的 plunker。你能检查一下吗?
  • 您现在可以查看此链接吗?复制粘贴错误拳头时间:D
【解决方案2】:

你需要这样写:

//our root app component
import {Component} from '@angular/core';
import {ROUTER_DIRECTIVES, RouterConfig, Router} from '@angular/router';

import {LoginComponent} from './login';
import {TodosComponent} from './todos.ts';

export const AppRoutes: RouterConfig = [
  {
    path: "login", 
    component: LoginComponent,
    name:"Login"
  },
  {
    path: 'todos',
    component: TodosComponent,
    name:"Todos"
  }
  ,
  {
    path: "", 
    redirectTo: "/todos"
  },
]

@Component({
  selector: 'my-app',
  directives: [ROUTER_DIRECTIVES],
  template: `
    <a [routerLink]="['Login']">Login</a>
    <a [routerLink]="['Todos']">Todos</a>
    <router-outlet></router-outlet>
  `,
})

【讨论】:

  • 那我在哪里可以给子路由呢?我已经更新了我的 plunker。现在它显示了一些其他错误。你能检查一下并给我一个解决方案吗?
猜你喜欢
  • 2016-09-20
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 2021-03-05
  • 2018-06-08
  • 2016-11-14
相关资源
最近更新 更多