打字稿路由器导航()

Typescript Router navigate()

我正在为这个错误而苦恼:

NavigationError(id: 2, url: '/something/create?user=3#new', error: Error: Cannot match any routes. URL Segment: 'something/create')

到目前为止我已经做到了:

some.component.ts

constructor( private router: Router ) {}

createNew() {
    const navigateToNewWithUser: NavigationExtras = {
        fragment: 'new',
        queryParams: {'user': this.user.id}
    };

    this.router.navigate(['/something/create'], navigateToNewWithUser);
}

some.component.html

<button class="btn add-button float-right jh-create-entity" (click)="createNew()">

some.route.ts

{
    path: 'something/create?user=:id#new',
    component: SomeComponent,
    resolve: {
        supervision: UserPageResolver
    },
    data: {
        authorities: ['ROLE_ADMIN'],
        pageTitle: 'home.create'
    },
    canActivate: [UserRouteAccessService]
}

所有其他路线都采用相同的模式并且工作得很好。 我不明白,因为 /something/create?user=3#new 匹配我在 route.ts

中输入的内容

我正在处理 Angular 6 个使用 JHipster 生成的项目。 我尝试更改 URL、删除 #new、将 ?user=:id 放在末尾等等,但我总是遇到同样的错误。

有什么想法吗?我在这里阅读了很多关于 angular 路由的问题,但还没有找到我的问题的答案。

如果您需要更多代码,请询问。

告诉你的路线它可以通过简单的“:id”而不是"user=:id"接收参数。它会自动解析为 "user=2"

  {
    path: 'something/create/:id',
    component: SomethingComponent
  }

如果你想在你的路由中使用哈希,你必须打开哈希定位策略 RouterModule.forRoot(routes, {useHash: true})

并且对于查询参数,将您的路由器路径更改为

path: 'something/create/:id

你也可以这样试试,

 this.router.navigate(['/something/create'], { queryParams: { user: this.user.id } });

将路线更改为,

    { path: 'something/create',  component: SomeComponent }