Маршрутизация угловая 5, передача строки по параметрам после URL - PullRequest
0 голосов
/ 29 января 2019

Я занимаюсь разработкой углового проекта, основанного на информации о географической системе.Идея такова: у меня есть компонент, маршрут которого: {path: 'home'} Я хочу передать URL-адрес геоджона с таким маршрутом, чтобы он был таким: {path: 'home/:url'} И в функции Onit компонента я получаю свой URL-адрес и использую его вконкретная функция.Но проблема, с которой я сталкиваюсь, заключается в том, что когда я помещаю строку, я могу получить ее, но длинный URL перенаправляет меня на страницу входа.Мой код:

ngOnInit() {
    this.subscription = this.route.params.subscribe(params => {
        this.load(params['url']);
    });
}

load (url) {
    // code of the function here
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Чтобы выяснить, в чем проблема, зарегистрируйте свой route на console и посмотрите, принимает ли он какие-либо из ваших маршрутов.Это общая проблема.Ваш route не совпадает ни с одним, и, поскольку в вашем модуле маршрутизации есть что-то вроде этого:

{ path: '**', redirectTo: 'login' }

, вы будете перенаправлены без каких-либо ошибок.Удалите строку, подобную этой (для целей тестирования), и вы получите ошибку, которая сообщит вам, что именно не так.

0 голосов
/ 29 января 2019

Проблема с этой реализацией заключается в том, что вы по существу добавляете приложение url к другому URL.Если ваши маршруты определены как /home/:url, вы можете себе представить, насколько запутанным будет Angular Router, если вы передадите URL-адрес geojson, а URL-адрес вашего приложения внезапно будет выглядеть как /home/http://geojson.io/#map=13/40.7159/-74.0084 - Маршрутизатор не может сопоставить этот 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...
}
...