我想创建一个外部重定向,但为了使所有路由保持一致,我认为在路由器状态配置下做所有事情(包括外部重定向)会很好 .
所以:
const appRoutes: Routes = [
{path: '', component: HomeComponent},
{path: 'first', component: FirstComponent},
{path: 'second', component: SecondComponent},
{path: 'external-link', /*would like to have redirect here*/}
];
建议使用 UPD :和 I don't want to use empty component for this case 之类的 @koningdavid . 对我来说这个解决方案看起来很奇怪 . 对于没有虚拟组件的情况,这应该是非常容易实现的 .
7 回答
您可以使用路线的resolve选项通过技巧实现您想要的效果 . Resolve是Angular2将为要初始化的路由获取的一些数据值 . 您可以在官方文档中找到更多详细信息here .
我尝试过这种方法,但确实有效 . 例:
将其添加到提供程序部分(再从路由导入所需的类)
然后你可以像这样定义你的路线:
这将重定向到外部URL . 这真的是一种hackish的方式 . 我试图在不使用组件的情况下实现结果,但您必须使用
redirectTo
或component
或children
或loadChildren
.redirectTo
不会触发决心,我不确定孩子,虽然你可以试验 .您可以在一个很好的类中实现它,而不是在提供程序中直接执行它 . 文档中的更多信息(参见上面的参考资料) .
附:我想我自己宁愿使用重定向组件 . 只需使用数据技巧并通过
externalUrl
从路由器获取状态,将其作为参数 .据我所知NG2路由器不支持外部重定向 . 您可以创建重定向组件作为变通方法 .
并在您的路由中使用它
您可以创建RedirectGuard:
在app.module中导入它:
并定义您的路线:
嗯...
我想你可以简单地请求URL而不是调用ng2 Router ...
例如...
代替
OR
代替
对...?
路由器无法从外部重定向 . 外部资源不能是应用程序的状态 .
如果仅为了清晰起见,保持所有路径在一个点中可见,则可以定义另一个常量数组,其中所有外部路径与路径在同一文件中 .
我假设你不想为每个网址创建一个组件,这就是为什么你要在没有组件的情况下做这个...
所以你可以尝试创建一个为你生成组件对象的函数...
例如...
并在路由器配置中添加如下...
使用JS会很容易...但不确定如何在typeScript函数中返回一个类...
希望有帮助......
结束伊利亚的回答:
添加此模块 .
然后导入
ExternalRoutesModule
并添加ExternalRoute的实例 .注意我在这个例子中通过loadChildren挂载子模块路由 .