route navigate example location angular angular2-routing

navigate - Angular2: no se puede navegar a la url usando location.go(url)



router.navigate angular 6 (1)

Estoy tratando de navegar a una url específica usando el servicio location.go de la función de escritura. Cambia la url en el navegador, pero el componente de la url no se refleja en la pantalla. Permanece en la pantalla de inicio de sesión (real), por ejemplo, por ejemplo:

constructor(location: Location, public _userdetails: userdetails){ this.location = location; } login(){ if (this.username && this.password){ this._userdetails.username = this.username; this.location.go(''/home''); } else{ console.log(''Cannot be blank''); } }

¿Hay un método de compilación o un método de actualización que estoy perdiendo?


Sí, para redirigir de una ruta a otra no debería usar location.go , generalmente se utiliza para obtener la normalized url en el navegador.

Documentos de ubicación ha mencionado estrictamente a continuación la nota.

Nota: es mejor usar el servicio de enrutador para activar cambios de ruta. Use Ubicación solo si necesita interactuar con o crear URL normalizadas fuera del enrutamiento.

En su lugar, debe usar el método de navigate la API del Router , que tomará [''routeName''] mientras lo hace mientras crea href usando la directiva [routerLink] .

Si deseara redireccionar solo a través de la URL, entonces podría usar router.navigateByUrl(url) que toma la URL como una cadena como router.navigateByUrl(url)

import { ROUTER_DIRECTIVES, RouteConfig, ROUTER_PROVIDERS, Location, //note: in newer angular2 versions Location has been moved from router to common package Router } from ''angular2/router''; constructor(location: Location, public _userdetails: userdetails, public _router: Router){ this.location = location; } login(){ if (this.username && this.password){ this._userdetails.username = this.username; //I assumed your `/home` route name is `Home` this._router.navigate([''Home'']); //this will navigate to Home state. //below way is to navigate by URL //this.router.navigateByUrl(''/home'') } else{ console.log(''Cannot be blank''); } }

Actualizar

En un estudio adicional, descubrí que, cuando se llama a navigate , básicamente se acepta routeName dentro de la matriz, y si hay parámetros, entonces se deben pasar con ellos como [''routeName'', {id: 1, name: ''Test''}] .

A continuación se muestra la API de la función de navigate del Router .

Router.prototype.navigate = function(linkParams) { var instruction = this.generate(linkParams); //get instruction by look up RouteRegistry return this.navigateByInstruction(instruction, false); };

Cuando linkParams pasó a la función de generate , devuelve todas las Instruction necesarias para navegar en otro componente. Aquí, Instruction significa ComponentInstruction ''s que tienen toda la información sobre Enrutamiento, básicamente lo que registramos dentro de @RouteConfig , se agregará a RouteRegistry (como en qué path debe asignar Component al router-outlet ).

Ahora recuperado, la instrucción se pasa al método urlParams , que es responsable de cargar el Componente y hará que varias cosas estén disponibles para el componente como urlParams y la instrucción del componente padre e hijo, si están allí.

Instrucción (en consola)

auxInstruction: Object //<- parent instructions child: null //<- child instructions component: ComponentInstruction //<-current component object specificity: 10000 urlParams: Array[0] <-- parameter passed for the route urlPath: "about" //<-- current url path

Nota: la respuesta completa se basa en una versión anterior del enrutador, cuando Angular 2 estaba en versión beta.