当前位置: 首页 > 知识库问答 >
问题:

使用 Angular 中的参数进行路由

邓仲卿
2023-03-14

我的路由配置有问题。我的应用程序逻辑——我在标题中有一个控制导航的下拉菜单。下拉选项通过下拉菜单下的额外导航栏导航到页面。单击下拉选项时,传递路由参数。问题是,我需要加载组件,它不在导航栏上,但在下拉导航后用作默认屏幕。

第一个导航“层”是下拉列表。之后,URL是index/Param#。

第二个导航“层”是导航栏,它加载在具有url索引/ Param#的页面上。在该页面上,我有组件(“默认屏幕”),当url为index / Param#时加载。但此组件在导航栏上没有任何链接。

const routes: Routes = [
   { path: '', component: MainComponent },
   { path: 'stages', component: StagesComponent }
];

Stages-routing.module.ts

const routes: Routes = [
{ path: 'stages', component: StagesComponent, children: [
    { path: ':name', component: StageComponent },
    { path: 'programm', component: ProgrammComponent },
    { path: 'jury', component: JuryComponent },
    { path: 'finalists', component: FinalistsComponent },
    { path: 'results', component: ResultsComponent },
    { path: 'photo', component: PhotoComponent },
    { path: 'partners', component: PartnersComponent },
    { path: 'contacts', component: ContactsComponent},
    ]}
];

myService.ts

navigateTo(selectedItem) {
      this.router.navigate(['stages', selectedItem]);
     // selectedItem is dropdown value
  }

例如,当我导航到“programm”时,Angular无法解析此路径。我该怎么办?

共有2个答案

微生俊名
2023-03-14

基本上,您在这里所做的是,所有路由都转到阶段/:name,而下面的其他路由永远不会被访问,您只需删除这一行
{path:':name',component:StageComponent},一切都会如您所料正常工作

const routes: Routes = [
{ path: 'stages', component: StagesComponent, children: [
    { path: ':name', component: StageComponent }, // Delete this line
    { path: 'programm', component: ProgrammComponent },
    { path: 'jury', component: JuryComponent },
    { path: 'finalists', component: FinalistsComponent },
    { path: 'results', component: ResultsComponent },
    { path: 'photo', component: PhotoComponent },
    { path: 'partners', component: PartnersComponent },
    { path: 'contacts', component: ContactsComponent},
    ]}
];

这里的错误是Angular routes从上到下读取,第一个子路由需要一个参数<code>名称,其他路由从未被触摸。

'stages/programm' if isn't this route go to next one
'stages/jury' if isn't this route go to next one 
...
// and so one till the end of array
// and if no child routes find then will display default component which is 'StageComponent' 

// so your routes array should be something like this
const routes: Routes = [
{ path: 'stages', component: StagesComponent, children: [
    { path: 'programm', component: ProgrammComponent },
    { path: 'jury', component: JuryComponent },
    { path: 'finalists', component: FinalistsComponent },
    { path: 'results', component: ResultsComponent },
    { path: 'photo', component: PhotoComponent },
    { path: 'partners', component: PartnersComponent },
    { path: 'contacts', component: ContactsComponent},
    { path: ':name', component: StageComponent }, // if no child routes found then display default
    ]}
];

Or you can delete this line and if user write anything else that you have in children array then redirect it to 404 page .
For more info please read docs on Angular https://angular.io/guide/router they have really good explanation of how things works in angular.

巫欣荣
2023-03-14

在< code>stages之后添加< code>/将解决您的问题。

navigateTo(selectedItem) {
      this.router.navigate(['stages/', selectedItem]);
     // selectedItem is dropdown value
  }

希望这会有帮助!

 类似资料:
  • 我正在尝试使用angular与主播合作,我已经做了我的研究,但没有成功,所以我正在联系你们。 我有 3 个组件 {导航栏组件, 红色组件, 蓝色组件} 导航栏组件有 2 个锚点。我希望当我单击其中一个时,它实际上会将我引导到正确的组件 导航栏组件.ts 红色. component.ts blue.component.ts app.component.html 应用程序模块

  • 将路由链接到参数 显示特定产品详细信息的组件的路由需要该产品ID的路由参数。我们可以使用以下实现: 注意:product-details路由的路径中的 ,它将参数放在路径中。例如,要查看ID为5的产品的产品详细信息页面,必须使用以下URL:localhost:3000/product-details/5 注意,指令传递一个数组,该数组指定路径和路由参数。或者,我们可以使用JS跳转: Product

  • 问题内容: Angular 2路线中是否可以有一个可选的路线参数?我在RouteConfig中尝试了Angular 1.x语法,但收到以下错误: ““原始例外:路径“ / user /:id?”包含路由配置中不允许的“?”。” 问题答案: 您可以使用和不使用参数来定义多个路由: 并处理组件中的可选参数:

  • 我读过关于如何确定活动路由的问题,但我仍然不清楚如何用参数确定活动路由? 现在我是这样做的: 在我的组件中: 这将起作用,因为我将用户名作为字符串传递。有没有办法通过传递正确的参数来做到这一点??

  • 本文向大家介绍symfony3 使用YAML进行路由,包括了symfony3 使用YAML进行路由的使用技巧和注意事项,需要的朋友参考一下 示例 路由配置包含在您的app/config/config.yml文件中,默认情况下是该app/config/routing.yml文件。 从那里,您可以链接到捆绑包中的自己的路由配置 它还可能包含多个应用程序全局路由。 您可以在自己的捆绑包中配置路由,该路由

  • 所以我得到了一条快速路线 因此,这项工作在上面使用邮递员 http://localhost:8000/buildings/Audi 我想知道Axios post如何进入功能组件。这是我的东西,但它没有在快车上。 但它不起作用。 ~SRJ