query parametros obtener navigate url angular parameters routing

url - parametros - routerlink



Angular2 obtener los parĂ¡metros de consulta url (6)

Estoy configurando un registro en Facebook para mi aplicación web Angular2. Una vez que la solicitud se aceptó a través de Facebook (después de haber sido redirigida a la página de autorización de Facebook), se redirige a mi aplicación web con el token y el código como parámetros url:

http://localhost:55976/?#access_token=MY_ACCESS_TOKEN&code=MY_CODE

Pero una vez que la página está cargada, los parámetros se eliminan. La url se convierte en:

http://localhost:55976/

¿Cómo puedo extraer los parámetros (access_token y código) antes de eliminarlos? Mi configuración de enrutamiento contiene:

{ path: ''login'', component: LoginComponent }, { path: ''login/:access_token/:code'', component: LoginComponent },

EDITAR:

Aquí es cómo redirigir a facebook en mi login.com: html:

<a class="btn btn-social btn-facebook socialaccount_provider facebook" title="Facebook" href="#" (click)="login_facebook()"> <span class="fa fa-facebook"></span> <span style="padding-left:25px">Sign in with Facebook</span> </a>

Mecanografiado:

login_facebook() { let url = ''https://www.facebook.com/dialog/oauth?''+ ''client_id=my_client_id'' + ''&redirect_uri='' + encodeURIComponent(''http://localhost:55976/#/login/'') + ''&response_type=code%20token''; console.log(url); window.location.href = url; }

La redirección de la API de Facebook a http://localhost:55976/#/login/ , aquí es donde trato de obtener los parámetros de access_token y código.

EDIT 2:

Si elimino el sharp en la url de redireccionamiento, Facebook me redirige a la URL buena, pero sin el sharp, angular no puede resolver la url.

Antes de eliminar ''#'':

redirect_uri: http://localhost:55976/#/login/ facebook return: http://localhost:55976/?#access_token=MY_ACCESS_TOKEN&code=MY_CODE

Después de eliminar ''#'':

redirect_uri: http://localhost:55976/login/ facebook return: http://localhost:55976/login/?#access_token=MY_ACCESS_TOKEN&code=MY_CODE

Eso significa que el problema viene de lo agudo. Pero sin los retornos angulosos y angulosos HTTP Error 404.0 - No encontrado.


¡Esto funciona para mí! :)

import { ActivatedRoute } from ''@angular/router''; constructor(private route: ActivatedRoute) { } /** usage in the method */ let projectId = this.route.snapshot.queryParams.projectId;


¿has probado esto?

import { Params, Router } from ''@angular/router''; constructor(private router: Router) { this.route.params.forEach((params: Params) => { //here you can get your params let param = params[''parameterName'']; }) }


Aquí está mi código de trabajo final:

Importaciones:

import { Router, NavigationCancel } from ''@angular/router''; import { URLSearchParams, } from ''@angular/http'';

Constructor:

constructor(public router: Router) { router.events.subscribe(s => { if (s instanceof NavigationCancel) { let params = new URLSearchParams(s.url.split(''#'')[1]); let access_token = params.get(''access_token''); let code = params.get(''code''); } }); }


Estás buscando parámetros de consulta de ActivatedRoute .

Para recibirlos, puede colocarlos en la función OnInit su componente de esta manera:

private accesstoken; private code; constructor(private route: ActivatedRoute) { } ngOnInit() { // Capture the access token and code this.route .queryParams .subscribe(params => { this.accesstoken = params[''#access_token'']; this.code = params[''code'']; }); // do something with this.code and this.accesstoken }

Hay más ejemplos en el enlace que puse arriba. Es posible que tenga problemas con angular porque el enrutador también identifica los fragmentos, que comienzan con # ... Si angular lo identifica como un fragmento, entonces puede suscribirse al fragmento observable desde ActivatedRoute y hacerlo de esa manera.

No estoy seguro si estás siendo redirigido. Si es así, podría considerar el uso de la opción de navegación preserveQueryParams , algo como esto.

this.router.navigate([redirect], {preserveQueryParams: true});


utilizando Javascript:

(new URL(location)).searchParams.get("parameter_name")


getQueryParams( locationSearch: string):any { let params = {}; if( locationSearch ) { locationSearch = locationSearch.split(''?'')[1]; let splited = locationSearch.split(''&''); for( let i = 0; i < splited.length; i++ ) { let propName = splited[i].split(''='')[0]; let propValue = splited[i].split(''='')[1]; params[propName] = propValue; } } return params; } let q = getQueryParams( location.search );