我正在根据地理系统信息开发一个有角度的项目。
这个想法是:
我有一个组件,其路由为:{path: 'home'}
我想通过以下路线传递geojson网址:{path: 'home/:url'}
在组件的Onit函数中,我获取了我的网址,并在特定功能中使用了它。
但是我遇到的问题是,当我放入字符串时,我可以得到它,但是长网址将其重定向到登录页面。
我的代码是:
ngOnInit() {
this.subscription = this.route.params.subscribe(params => {
this.load(params['url']);
});
}
load (url) {
// code of the function here
}
谢谢。
答案 0 :(得分:1)
此实现的问题在于,您实际上是在 application 网址后面附加另一个网址。如果将路由定义为/home/:url
,您可以想象如果传入geojson URL而应用程序URL突然看起来像/home/http://geojson.io/#map=13/40.7159/-74.0084
,那么Angular Router会变得多么困惑-Router无法将该URL映射到任何定义的路由,并且只导航到您的默认/通配符路由(在您的情况下为/login
)。
传递长字符串的一种好方法是将URL设置为queryParam
而不是路由参数-https://alligator.io/angular/query-parameters/。
我建议删除/home/:url
路线并尝试以下操作:
// in your template
<a [routerLink]="['/home']"
[queryParams]="{ url: 'http://geojson.io/#map=13/40.7159/-74.0084' }">
// in your component
constructor(
private route: ActivatedRoute
) {}
ngOnInit() {
let url = this.route.snapshot.queryParams.url;
this.load(url);
}
private load(url: string) {
// do something with the url...
}
答案 1 :(得分:0)
要找出问题所在,请将您的route
登录到console
,看看它是否接受您的任何路由。这是一个普遍的问题。您的route
与任何内容都不匹配,并且您的代码模块中的某处也有这样的内容:
{ path: '**', redirectTo: 'login' }
您将被重定向,完全没有任何错误。删除这样的行(出于测试目的),您将得到一条错误消息,告诉您确切的错误所在。