Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Routing Angular2:用于';的路由生成器';未包含在传递的参数中_Routing_Angular_Angular2 Routing - Fatal编程技术网

Routing Angular2:用于';的路由生成器';未包含在传递的参数中

Routing Angular2:用于';的路由生成器';未包含在传递的参数中,routing,angular,angular2-routing,Routing,Angular,Angular2 Routing,我在Angular2路线上遇到了麻烦。我有几个层次的筑巢。以下是我的设置:我为未经身份验证的用户提供顶级路由。登录后,它们将处于/my路由下。在这个级别上,他们有一个仪表板,可以将他们带到/my/projects/级别。projects下的路由需要id。设置的详细信息如下。 下面是顶级的AppComponent: @RouteConfig([ {path: '/home', name:'Home', component: HomeComponent, useAsDefault: true}

我在Angular2路线上遇到了麻烦。我有几个层次的筑巢。以下是我的设置:我为未经身份验证的用户提供顶级路由。登录后,它们将处于
/my
路由下。在这个级别上,他们有一个仪表板,可以将他们带到
/my/projects/
级别。
projects
下的路由需要id。设置的详细信息如下。 下面是顶级的
AppComponent

 @RouteConfig([
  {path: '/home', name:'Home', component: HomeComponent, useAsDefault: true},
  {path: '/login', name: 'Login', component: LoginComponent},
  {path: '/signup', name: 'SignUp', component:SignUpComponent},
  {path: '/my/...', name: 'MyApp', component: MyAppComponent}
])
export class AppComponent {
  constructor(private router: Router) {

  }
经过身份验证后,用户将转到MyAppComponent,其设置如下:

 @RouteConfig([
  {path:'/dashboard', name: 'MyDashboard', component: DashboardComponent, useAsDefault: true},
  {path: '/projects/...', name: 'MyProjects', component: ProjectRootComponent},
])

export class MyAppComponent {

  constructor(private router: Router) {
  }
}
    @RouteConfig ([
  {path: '/:id', name: 'ProjectHome', component: ProjectHomeComponent, useAsDefault: true},
  {path: '/:id/details', name: 'ProjectDetails', component: ProjectDetailsComponent },
])

export class ProjectRootComponent implements OnInit {

  id: string;
  constructor(private router: Router, private routeParams: RouteParams, private projectService: ProjectService) {
  }

  ngOnInit() {
    this.id = this.routeParams.get('id');

    console.log('Project Component Initialized with id: ' + this.id);
  }

  createProject() {

  }
}
仪表板组件:

export class DashboardComponent {
  public projects: Array<Project>;
  public loaded: boolean;
  public loadError: boolean;

  constructor(private _service: ProjectService, private router:Router) {
    this.projects = [];
    this.loaded = false;
  }

  ngOnInit() {
    console.log('Dashboard component initialized');
    this._service.getUserProjects()
    .then(projects => {
      this.loaded = true;
      this.projects = projects;
    },
    error => {
      this.loaded = true;
      this.loadError = error;
    });
  }

  selectProject(project: Project) {
    // this.router.navigateByUrl('/my/projects/' + project.id); // Tried this approach as well with the same error
    this.router.parent.navigate(['MyApp', 'MyProjects', {id: project.id}]);
  }
调用仪表板上的
selectProject(project)
时,我得到错误:
原始异常:“id”的路由生成器未包含在传递的参数中。

我还尝试使用以下两种方法直接导航到项目详细信息:

this.router.parent.navigate(['MyApp', 'MyProjects', {id: project.id}, 'ProjectDetails']

两者都会产生与上述相同的错误


注意:这与前面的问题类似,但我的路线已经设置好了,正如该问题的答案中所建议的那样。

我认为您存在路线查找问题,因为您是从子路线导航的。From(对于
linkParams
)应相同:

第一个路由名称前面应加/、./或../。如果路由以/开头,路由器将从应用程序的根目录查找路由。如果路由以./开头,路由器将在当前组件的子组件中查找路由。如果路由以../开头,路由器将查看当前组件的父组件

我认为这应该是可行的:

this.router.navigate(['/MyApp', 'MyProjects', 'ProjectDetails', {id: project.id}]
或从仪表板:

this.router.navigate(['./MyProjects', 'ProjectDetails', {id: project.id}]

我认为您有路由查找问题,因为您是从子路由导航的。From(对于
linkParams
)应相同:

第一个路由名称前面应加/、./或../。如果路由以/开头,路由器将从应用程序的根目录查找路由。如果路由以./开头,路由器将在当前组件的子组件中查找路由。如果路由以../开头,路由器将查看当前组件的父组件

我认为这应该是可行的:

this.router.navigate(['/MyApp', 'MyProjects', 'ProjectDetails', {id: project.id}]
或从仪表板:

this.router.navigate(['./MyProjects', 'ProjectDetails', {id: project.id}]

感谢您包含链接文本,因为现在链接404s感谢您包含链接文本,因为现在链接404s