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

Angular 2-检查当前活动路由“名称”

戴博
2023-03-14

我有一个Angular 2应用程序与几个嵌套的子视图。但它将通过几个router-output显示在同一页面上。

const routes: Routes = [
    {
        path: 'queue/:date/:offset/:type',
        component: BundleListComponent,
        resolve: {
            response: BundleListResolve
        },
        children: [
            {
                path: ':bundleId', component: PointListComponent,
                resolve: {
                    response: PointListResolve
                },
                children: [
                    {
                        path: ':pointId', component: TaskListComponent,
                        resolve: {
                            response: TaskListResolve
                        },
                        children: [
                            {
                                path: ':taskId', component: TaskDetailComponent,
                                resolve: {
                                    response: TaskDetailResolve
                                }
                            },
                            { path: '', component: EmptyComponent }
                        ]
                    },
                    { path: '', component: EmptyComponent }
                ]
            },
            { path: '', component: EmptyComponent }
        ]

    },
    {
        path: 'queue',
        component: QueueRedirectComponent
    }
}
    null

例如:

#/queue/2017-01-05/480/20/57f4c26507b36e3684007b52/1/57fb0abb07b36e39d8e88df8/1

假设您有一个包含某些元素的页面:

  1. 一个UI部分显示电影列表
  2. 当单击电影列表中的项目时,另一部分显示电影详细信息,但显示在同一页上。
  3. 单击电影详细信息中的角色名称时显示角色详细信息的另一个部分,也可显示在同一页上。
  4. 等..

因此,我现在所做的是基于window.location获得URL并通过/拆分这个字符串来获得参数的数量。但它是更硬编码的。

有做同样事情的经验吗?我如何区分哪条路由当前处于活动状态?

共有1个答案

澹台俊晖
2023-03-14

我相信Scott的答案有一个问题,他在服务的构造函数中使用了ActivatedRoute。此路由将无法更新。

我想了另一个办法,也许能看出你的兴趣。它再次出现在对路由使用data属性上,但现在使用了另一个解析服务:

您将需要一个类似这样的RouterConfig,其中为每条路由添加state:stateResolve和一个包含状态名称的数据对象:

const routes: RouterConfig = [{
    path: 'queue/:date/:offset/:type',
    component: BundleListComponent,
    resolve: {
       response: BundleListResolve,
       state: StateResolve
    },
    data: {
       state: 'Bundle'
    },
    ...
]
@Injectable()
export class StateResolve implements Resolve<string> {

   constructor(private stateService: StateService) {}

   resolve(route: ActivatedRouteSnapshot): string {
       let state: string = route.data['state']
       this.stateService.setState(state);
       return state;
   }
}

显然,您将需要一个stateService,它具有setstate方法,但我想从这里可以很好地说明。

也许使用resolve保护有点古怪,但如果您仔细想想,您正在尝试在显示路由之前解析数据。在本例中,是data变量内部的状态,因此使用resolve访问data属性是有意义的

 类似资料:
  • Angular2有一个routerLinkActive指令,如果路由是活动的,它会向元素添加类。我想在路由不活动时添加一个类。有办法做到这一点吗?

  • 所以我有一些路线,比如<code>/category/tech</code>和<code</categority/tech/new<code>和<code>/category/tech/old</code>等等 他们都使用 或者我必须分别定义它们,就像

  • 使用Appium(用于windows上的android),我需要检查登录场景,输入用户和密码后,点击登录按钮,新(等待)活动打开,1。请指导我如何获得当前活动,即在按下登录按钮之前。2.按下登录按钮后,如何导航到等待活动,以便检查登录是否成功。

  • 问题内容: 我正在尝试实现一种语言切换器,如果用户在“ en”侧的任何给定页面上单击“ de”,它将带他们进入“ de”侧的该页面。如果我使用console.dir $ state参数,它将使用给定$ state的“当前”属性公开我想要的值。如果我尝试用$ state.current来console.dir $ state.current来关注我想要的值,那么它只会给出父状态属性(我的当前视图是嵌

  • 问题内容: 我只是在设置这个: :id和:slug是动态参数。 现在我想去那条路线() 例如url: 哪个是最简单的方法? 我尝试了这个: 但有时在切换页面路由时它在控制台中不返回任何内容 问题答案: 当前路由允许您使用正则表达式。注入服务并探索当前路线对象。即部分: 这是使用它的方式(例如,通过控制器方法检查是否应激活当前菜单项(具有动态部分)):