路由angular 5,在url之后的params上传递字符串

时间:2019-01-29 15:16:59

标签: javascript angular typescript angular2-routing

我正在根据地理系统信息开发一个有角度的项目。 这个想法是: 我有一个组件,其路由为:{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
}

谢谢。

2 个答案:

答案 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' }

您将被重定向,完全没有任何错误。删除这样的行(出于测试目的),您将得到一条错误消息,告诉您确切的错误所在。