Angular 角度2.5如何在管线参数中传递/输入

Angular 角度2.5如何在管线参数中传递/输入,angular,angular2-routing,angular5,Angular,Angular2 Routing,Angular5,我已经在谷歌上搜索了这个问题,但运气不好 是否可以使用“/”作为路线参数的一部分?例如,我有以下路线: { path: 'pages/:page', component: HomeComponent } 我想将folderName/Page传递到:Page参数中,因此: /pages/testFolder/testPage将匹配上述路由 我无法创建其他路由,因为这需要是动态的(即/pages/folder/folder/folder/folder/folder/folder/f

我已经在谷歌上搜索了这个问题,但运气不好

是否可以使用“/”作为路线参数的一部分?例如,我有以下路线:

{
    path: 'pages/:page',
    component: HomeComponent
}
我想将
folderName/Page
传递到
:Page
参数中,因此:
/pages/testFolder/testPage
将匹配上述路由

我无法创建其他路由,因为这需要是动态的(即
/pages/folder/folder/folder/folder/folder/folder/folder/page

如果可能的话,请告诉我

我已经尝试了步骤,并尝试使用url匹配器,但没有运气


谢谢

您可以按如下方式设置路线以解决问题

  {
    path: 'pages',
    children: [
      {
        path: "**", component: PagesComponent
      }
    ]
  }
因此,这里要做的是任何以页面/开始的路径。。。将使用此路由拦截

要从URL获取不同的段,您可以在组件中使用下面的内容

constructor(route: ActivatedRoute) {
   route.url.subscribe(segments => // use segments as suitable );
}
因此,根据您的url,段会有所不同

路线:/pages/Folder1/Page1

细分市场

 [ { "path": "Folder1", "parameters": {} }, { "path": "Page1", "parameters": {} } ]
路线:/pages/Folder2/Folder3/Page1

细分市场

 [ { "path": "Folder1", "parameters": {} }, { "path": "Page1", "parameters": {} } ]
[{“路径”:“Folder2”,“参数”:{},{“路径”:“Folder3”,“参数”:{},{“路径”:“Page1”,“参数”:{}]

这是


<> P>你必须考虑的是,通配符路由会吸收从页面开始的任何东西,从而使它持续下去。

< P>很好,使用正向斜线作为路由的一部分总是一个挑战。p> 使用通配符可能是解决问题的一种选择,但有时可能很危险(如答案中所述)

我遇到了同样的问题,我通过在
URL
中将
前斜杠
转换为
加号
解决了这个问题

它允许我保持正常的路由配置,因此
URL
也变得可读

为了解决映射问题,我提出了
路由解析器

import { Injectable } from "@angular/core";
import { Resolve, ActivatedRouteSnapshot } from "@angular/router";

@Injectable()
export class PageResolverService implements Resolve<any> {

    resolve(route: ActivatedRouteSnapshot) {
        //assuming route is 'pages/:page'
        let path: String = route.params.page.replace('+', '/');
        //API call goes here
    }
}
最后,我不得不处理一个角落案例场景,其中路线名称本身有
+
签名。其他一切都很好


我希望这有帮助:)

您可以始终使用
encodeURIComponent
对其进行编码,然后在组件中对其进行解码。Angular将实际为您解码参数。例如,如果您按照用户184994的建议传入
folderName%2FPage
。拉取参数时,
:page
将是
folderName/page
,您可以使用{path:'pages/:folder/:page',component:MyComponent}。然后在ngOnInit中this.route.params.subscribe(params=>console.log(params))//对象{folder:textFolder,page:textPage}@user184994当用户在URL栏中手动键入URL时会发生什么?他们不会打出来的characters@LLai我不能这样做,因为用户可以喜欢URL或手动键入它。这对最终用户有何帮助?假设我手动输入URL:pages/folder1/folder2/myPage。这是行不通的,因为最终用户不知道他需要使用+看起来通配符是这里唯一可用的选项。URL在开始时是否总是有
页面
路由?如果是这种情况,您可以使用通配符方法(类似于
*pages:folder path
)来解决其他答案中解释的问题。这使我更接近于解决方案。我仍然希望用老方法来完成这项工作(AngularJS可以做得很好),但我可能能够做到这一点。仍然接受其他答案。谢谢