page change angular

change - Angular 2: enrutamiento sin cambiar la URL



dynamic title angular 5 (3)

¿Cómo puedo enrutar en una aplicación Angular 2 sin cambiar la URL? (Esto se debe a que la aplicación se encuentra debajo de una de varias pestañas en una página de una aplicación de Django, donde es adecuado dejar la URL sin cambios).

Actualmente tengo algo como esto dentro de app.component.ts

@RouteConfig([ { path: ''/home'', name: ''Home'', component: HomeComponent, useAsDefault: true }, { path: ''/user/:id'', name: ''UserDetail'', component: UserDetailComponent } ])

y dentro de decir HomeComponent , la navegación a una página de usuario usa lo siguiente

this._router.navigate([''UserDetail'', {id: id}]);

entonces la url se verá como http://localhost:8000/django_url/user/123

¿Es posible que la URL no cambie cuando navego dentro de la aplicación Angular 2? entonces la url permanecerá http://localhost:8000/django_url cuando un usuario esté en la página user/123 ?

¡Gracias!


Finalmente está trabajando en la versión final de Angular2. Debe pasar {skipLocationChange: true} mientras navega hacia la ruta, es decir

this.router.navigateByUrl(''path'', { skipLocationChange: true });


this.router.navigateByUrl(''path'', { skipLocationChange: true }); También funcionó para mí.

En la matriz de Routes también agregué mi ruta para cargar un componente de la siguiente manera:

const appRoutes: Routes = [ { path: ''Account/MySchool'', component: MySchoolComponent } ];

Y en el archivo a partir de ahí, necesito reemplazar el componente, inicializar el objeto del router como se muestra a continuación y llamar al lugar requerido

import { Router } from ''@angular/router''; constructor(private router: Router) { } onSubmit() { this._requestService.postPageOneData("Account/SavePageOneData", this.userProfile) .subscribe((response) => { if(response.status == ''success''){ this.router.navigateByUrl(''Account/PageTwoSelection'', { skipLocationChange: true }); } }, this.handleErrorSubscribed ); }


Actualizar

router.navigateByUrl("/team/33/user/11", { skipLocationChange: true });

<a [routerLink]="..." skipLocationChange>click me</a>

Actualizar

Hay un RP para apoyar esto directamente https://github.com/angular/angular/pull/9608

Asuntos relacionados

Original

Puede implementar una PlatformLocation personalizada similar a BrowserPlatformLocation pero en lugar de llamar a history.pushState() , history.replaceState() , history.back() e history.forward() mantienen los cambios en una matriz local.

Luego puede hacer que Angular use su implementación personalizada proporcionándola como

bootstrap(AppComponent, [provide(PlatformLocation, {useClass: MyPlatformLocation})]);