Angular2.0.0 - получить строку запроса (с?) Из стратегии местоположения хэштега url

Я использую angular 2.0.0, и у меня есть такой URL:

http://localhost:4200/?sptoken=MY_TOKEN#/resetPassword/

Я хочу получить MY_TOKEN от этого. Я перепробовал все, что смог найти здесь, но получил только "undefined".

Вторая проблема заключается в том, что я использую стратегию определения местоположения хэштега, и если я получаю такой URL-адрес, он преобразуется в http://localhost:4200/#/resetPassword/ (строка запроса исчезла), единственный раз, когда я мог получить доступ к этому токену, находится в основном компоненте, прежде чем он будет преобразован, но я не знаю, как его получить, большинство из того, что я нашел, относятся к параметрам запроса матричной нотации.

У вас есть предложения, как я могу решить эту проблему?

Это мой код:

export class ResetPasswordComponent implements OnInit {

  constructor(private route: ActivatedRoute) {
    console.log(this.route.snapshot.queryParams['sptoken']); // when i don't use 
                                               //HashLocationStrategy it logs the token
  }

}

export class AppComponent implements OnInit {

  constructor(private router: Router, public configService: ConfigService, private cookieService: CookieService,private route: ActivatedRoute) {
    console.log(this.route.snapshot.queryParams['sptoken']);
  }
}

И мои маршруты:

const appRoutes: Routes = [
    {path: UrlPaths.HELLO, component: HelloComponent, canActivate: [PrivatePageGuard]},
    {path: UrlPaths.LOGIN, component: LoginComponent},
    {path: UrlPaths.MAIN_PAGE, component: AppComponent},
    {path: UrlPaths.FORGOT_PASSWORD, component: ForgotPasswordComponent},
    {path: UrlPaths.RESET_PASSWORD, component: ResetPasswordComponent}
];

export const appRoutingProviders: any[] = [];

export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);


export const UrlPaths = Object.freeze({
    LOGIN: 'login',
    HELLO: 'hello',
    FORGOT_PASSWORD: 'forgotPassword',
    RESET_PASSWORD: 'resetPassword',
    MAIN_PAGE: ''
});

Я также попытался получить токен в основном компоненте, используя этот URL: http://localhost:4200/?sptoken=MY_TOKEN#, но происходит то же самое


person Narcis Ciobotariu    schedule 08.10.2016    source источник
comment
sptoken вы устанавливаете его с помощью _2 _ ???   -  person micronyks    schedule 08.10.2016
comment
да, я использую внешний api для аутентификации и сброса пароля, и они отправляют мне токен через параметры запроса   -  person Narcis Ciobotariu    schedule 08.10.2016


Ответы (1)


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

person Günter Zöchbauer    schedule 08.10.2016
comment
Я пробовал сделать это, но это не работает из-за HashLocationStrategy, он не распознает строку запроса, когда я ее не использую, она работает, но я должен ее использовать - person Narcis Ciobotariu; 08.10.2016
comment
Я не думаю, что это связано с HashLocationStrategy. HashLocationStrategy работает так же, как PathLocationStrategy, только представление URL отличается (и для более поздних версий требуется поддержка сервера). Возможно, вы смотрите не на том уровне. Параметры запроса доступны только для маршрутов верхнего уровня. - person Günter Zöchbauer; 08.10.2016
comment
У меня есть только маршруты верхнего уровня, я пробовал даже в основном компоненте приложения, но все равно не получилось - person Narcis Ciobotariu; 09.10.2016
comment
Как выглядит URL-адрес, включая строку запроса? Не могли бы вы отредактировать свой вопрос и добавить туда код, демонстрирующий то, что вы пробовали? - person Günter Zöchbauer; 09.10.2016
comment
Пожалуйста, попробуйте this.route.queryParams.forEach((p) => console.log(p['sptoken'])); - person Günter Zöchbauer; 09.10.2016
comment
Я все еще получаю undefined с this.route.queryParams.forEach((p) => console.log(p['sptoken'])); - person Narcis Ciobotariu; 09.10.2016
comment
Тогда я не знаю. - person Günter Zöchbauer; 09.10.2016