Получить начальный URL-адрес при инициализации углового приложения

#angular #url

Вопрос:

Я пишу угловое приложение для целевой страницы для приложения SaaS. SaaS перенаправляет приложение angular с URL http://localhost:4200/token=<token> -адресом, и angular быстро переходит в компонент home http://localhost:4200/#/ .

Мне нужно получить значение <token> для использования в коде. Как скопировать исходный URL-адрес в приложении angular?

Комментарии:

1. Неужели нет ? в локальном хосте:4200/токен=<токен >?

2. @MikeOne, URL-адрес меняется очень быстро. Я хочу схватить <token> , как только откроется страница.

3. Я понимаю. Но этот указанный URL-адрес в первую очередь кажется недействительным

4. <a rel=»noreferrer noopener nofollow» href=»https://contoso.com/signup?token= contoso.com/signup?token=<токен><токен><авторизация_токен > это форма, которую Microsoft предоставляет ему

5. Так что же это такое ? В конце концов, там. Хорошо. Я думаю, что ваша проблема может заключаться в том, что вы используете стратегию hashLocationStrategy.. в противном случае это не должно быть проблемой, чтобы получить это из активированного маршрута внутри app.компонента..

Ответ №1:

вы можете использовать угловой маршрутизатор, чтобы получить токен, если он отформатирован так, как вы изобразили.

импортируйте угловой маршрутизатор из @angular/router.

 constructor(router:Router){}
yourRoute ?:string;
ngOnInit(){
this.yourRoute = this.router.url.split('/').pop();
}
 

для дальнейшего использования:

https://angular.io/api/router

если это не сработает, вы можете использовать активированную библиотеку маршрутов.

дай мне знать.

Комментарии:

1. Я пробовал маршрутизатор. Я получаю пустой жетон, потому что он смотрит http://localhost:4200/#/ и не http://localhost:4200/token=<token> смотрит . Преобразование происходит очень быстро. Мне пришлось бы перехватить токен до того, как модуль маршрутизации приложения переместит его.

2. Могу ли я как-то использовать путь с подстановочными знаками или, может быть, направить меня в активированную библиотеку маршрутов?

3. в этом случае вы можете использовать параметры маршрута, что, вероятно, является лучшим вариантом в любом случае.

4. также исправьте свою маршрутизацию и прекратите использовать хэш. ваш маршрутизатор должен знать о маркере маршрута — и он указывает на локальный хост:4200/#/токен . попробуйте использовать параметры маршрута, я думаю, это решит вашу проблему. angular.io/api/router/ActivatedRoute

Ответ №2:

  1. В вашем AppRoutingМодуле:
 import { Routes } from '@angular/router';
 
const routes:Routes = [
  {
    path:'',
    component: MainComponent, // Your main component, wich is going to get the token
    pathMatch: ‘full’
  },
  {
    path:'/:token',
    component: MainComponent, // Your main component, wich is going to get the token
  },
... // Your others routes:
  {
    path:'xxx',
    component: XxxComponent 
  },
  {
    path:'**',
    redirectTo: ''
  }
 
]

NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
})
export class AppRoutingModule {}
 
  1. Не забудьте импортировать в свой AppModule свой AppRoutingModule:
 ...
import { AppRoutingModule } from './app-routing.module';
...
 imports: [
    ...
    AppRoutingModule,
    ...
  ],

 
  1. В вашем основном компоненте, который получит токен
 import { ActivatedRoute } from '@angular/router';

  token:  string

  constructor(private activatedRoute: ActivatedRoute) {}

  ngOnInit(): void {

    this.token = this.activatedRoute.snapshot.paramMap.get('token');

    // If you were to receive countinuosly tokens :
    // this.activatedRoute.params.subscribe( _token => this.token = _token);}
 
 
Finally, you only have to call angular like this:
**http://localhost:4200/token**

 

Комментарии:

1. это неправильный ответ, который вы пытаетесь использовать для подстановки маркера маршрута — на самом деле он должен просто создать маршрут маркера — именно так он объединен. токен=<токен>. параметры маршрута — это правильный путь, но ваш маршрут-нет. вы никогда не должны пытаться пересечь корневой маршрут с помощью джокера, это плохая практика.