2017-02-21 95 views
2

这似乎是一个很简单的问题,但它的驾驶我疯了...动态参数config.map

有谁知道我可以指定动态:在id参数href路由配置选项?

以下遗憾的是不起作用:

config.map([ 
     // ... default parameterless routing here 
     { 
      route:[':id/request'], 
      moduleId:'processes/bdd/request/request', 
      name:'Request', title:'Request', href:`#/bdd/request/${id}/request`, settings:{type:'Request', icon:''}, nav:true, 
     }, 
     { 
      route:[':id/requestAuth'], 
      moduleId:'processes/bdd/request/requestauthorization', 
      name:'RequestAuthorization', title:'Request Authorization', href:`#/bdd/request/${id}/requestAuth`, settings:{type:'Request', icon:''}, nav:true, 
     }, 
     // ... some additional mappings here 
    ]); 

回答

3

href属性是静态的。如果你想通过这种途径来生成一个链接的路线,你可以使用route-href自定义属性是这样的:

route-href="route: request, params.bind: { id: someProp }" 

注意,我改变了路线名称是驼峰(全部小写,因为它是在这里一个字)以匹配路由命名约定。

+0

但是,如果我在路由配置中删除** href **属性?如果我试图删除它,我会得到以下错误:'ERROR [app-router]错误:“:id?/ requestAuth”的路由配置无效:动态路由必须指定要包含在导航模型中的“href:” 。' – Themos

+1

那是因为你有'nav:true'属性集。如果你不打算在某种形式的导航栏或类似的东西中使用这条路线,那么删除它,路由器将停止抱怨。 –

+0

但是如果我想在导航栏中使用它呢? – Themos

0

我有一个类似的用例,我可以通过向路由器添加一个流水线步骤来改变配置。

我的使用情况而定在我只希望该项目出现在当路由是活动的导航栏有点不同 - 说我有路线/abc/def/:id,并且/ghi - 当活动的路线是ABC或GHI,只有那些项目才会出现在导航栏中,但是当活动路线是DEF时,它应该出现在导航栏中,并且点击它应该导致您正在查看的DEF ID。因此,我的路线配置包含一个设置,该设置指示路线应当仅在导航栏中显示,当它是活动路线时。

这里是我的实际configureRouter功能的有趣的部分:

configureRouter(config, router) { 
    config.addPreActivateStep(Preactivate); // explained below 
    config.map([ 
    // some routes 
    { route: 'patients/:patientId', name: 'patient-master', 
     moduleId: 'patients-and-cases/patient-master/patient-master', 
     title: 'Patient', nav: true, settings: { renderOnlyWhenActive: true }, 
     href: '#' // it doesn't matter what this is 
    }, 
    // more routes 
    ]); 
} 

这里是Preactivate类,设置在预活化的href:

class Preactivate { 
    run(routingContext, next) { 
    routingContext.config.href = routingContext.fragment; 
    return next(); 
    } 
} 

如果,不像我,你想要这个要始终显示在导航栏中,这仍然有效--HREF将简单地保持设置为路由处于活动状态时设置的最后一项内容。在这种情况下,您可能需要将其初始化为一些有意义的默认值。