Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何使路由包含角度url方案_Angular - Fatal编程技术网

Angular 如何使路由包含角度url方案

Angular 如何使路由包含角度url方案,angular,Angular,在我的项目中,我需要制作一个包含ios应用程序打开URL方案的路由 我已经试过了 { 路径:“应用程序开启器*”, 组件:StoreComponent } 但它不起作用 我也尝试了matcher函数,但它将我重定向到: 在:(冒号)之后删除所有内容 为什么不打开存储组件请帮助。免责声明0:此解决方案使用angular.io上未记录的功能 免责声明1:这是我有史以来最糟糕的代码。别评判我,你已经被警告过了 免责声明2:官方不支持我这样做,尤其是url中的://部分。即使它现在可以工作,将来也可

在我的项目中,我需要制作一个包含ios应用程序打开URL方案的路由

我已经试过了

{
路径:“应用程序开启器*”,
组件:StoreComponent
}
但它不起作用

我也尝试了matcher函数,但它将我重定向到: 在:(冒号)之后删除所有内容


为什么不打开存储组件请帮助。

免责声明0:此解决方案使用angular.io上未记录的功能

免责声明1:这是我有史以来最糟糕的代码。别评判我,你已经被警告过了

免责声明2:官方不支持我这样做,尤其是url中的
://
部分。即使它现在可以工作,将来也可能会崩溃

我强烈鼓励您与同事一起寻找更好的URL方案。类似于
example.com/app opener/install open app/163Q70xR的东西将更容易维护

您还可以使用
apache/nginx

尽管如此,我还是想知道这是否可能。答案是。。。对(但请不要这样做)

您可以使用
UrlMatcher
实现自定义路由正则表达式。正如您在代码中看到的:

路由器d.ts

/**
*用于将路由与URL匹配的函数。实现自定义URL匹配器
*对于'Route.matcher',当'path'和'pathMatch'组合时`
*没有足够的表现力。不能与“路径”和“路径匹配”一起使用。
*
*该函数接受以下参数并返回一个“UrlMatchResult”对象。
***段*:URL段的数组。
***组*:段组。
***路由*:要匹配的路由。
*
*下面的示例实现与HTML文件匹配。
*
* ```
*导出函数htmlFiles(url:URLSEMENT[]){
*返回url.length==1&&url[0]。path.endsWith('.html')?({consumered:url}):null;
* }
*
*export const routes=[{matcher:htmlFiles,component:AnyComponent}];
* ```
*
*@publicApi
*/
导出声明类型UrlMatcher=(段:UrlSegment[],组:UrlSegmentGroup,路由:route)=>UrlMatchResult | null;
但是:URL的问题是
://安装open app
会混淆
路由器
。Angular将在布线结束时删除此部分之后的所有内容。在发送过程中,您仍然可以使用
窗口读取应用程序代码。位置
。将其放入路由数据中,以便以后可以读取

您可以实现这样的功能(经过测试,在我的机器上工作):

const routes:routes=[
{
匹配器:(url:URLSEMENT[],组:URLSEMENTGROUP,路由:路由)=>{
const code=window.location.pathname.split('install-open-app/')[1];
route.data={code};
返回url.length==1&&url[0]。path.startsWith('app-opener')?({consumered:url}):null;
},
组件:OpenerComponent,
},
];
然后,在组件中,您可以从路由数据获取代码:

导出类OpenerComponent实现OnInit{
代码:字符串;
构造函数(路由:ActivatedRoute){
route.data.subscribe((data)=>this.code=data.code);
}

ca您是否可以提供有关code@PiyushJain在我的问题中,您可以看到,我只需要在这个url上打开store组件,那么
example.com/app opener/install open app/163Q70xR
呢?如果客户端应用程序可以,那么code@ArnaudDenoyelle不,我需要同样的ios URL模式,但它是在“应用程序代码”之后移动所有内容该部分似乎仅在UrlMatcher中可用…试图找出solution@AkashKumarVerma终于找到了一种使用路由数据的方法。我编辑了答案注意:如果你想在URL中保留应用程序代码,你仍然可以使用这段代码来制作一个中间组件,它将
router.navigate()
将用户添加到一个更干净的URL。最好的解决方案仍然是从一开始就有一个更干净的URL。@AkashKumarVerma:冒号之后的部分在导航过程中仍然是可读的。它只在导航结束时被删除。因此,您仍然可以将它放在数据中,并使用它将用户导航到包含此代码的URL。Yo你可以将
OpenerComponent
的构造函数中的代码替换为
路由器。导航
就可以了。在我的计算机上,即使代码从URL中消失,代码也能正确显示