Подтвердить что ты не робот

Angular 2: маршрутизация без изменения URL-адреса

Как я могу маршрутизировать приложение Angular 2 без изменения URL-адреса? (это связано с тем, что приложение расположено под одной из нескольких вкладок на странице приложения Django, где подходит для оставления URL без изменений.)

В настоящее время у меня есть что-то вроде этого внутри app.component.ts

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

и внутри say HomeComponent, для перехода на страницу пользователя используются следующие

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

тогда URL будет выглядеть как http://localhost:8000/django_url/user/123

Возможно ли, чтобы URL-адрес не изменился, когда я перемещаюсь внутри приложения Angular 2? поэтому URL останется http://localhost:8000/django_url, когда пользователь находится на странице user/123?

Спасибо!

4b9b3361

Ответ 1

Обновление

router.navigateByUrl("/team/33/user/11", { skipLocationChange: true });
<a [routerLink]="..." skipLocationChange>click me</a>

Обновление

Существует PR для поддержки этого непосредственно https://github.com/angular/angular/pull/9608

Связанные проблемы

Оригинал

Вы можете реализовать пользовательский PlatformLocation, похожий на BrowserPlatformLocation, но вместо вызова ot history.pushState(), history.replaceState(), history.back(), и history.forward() поддерживают изменения в локальном массиве.

Затем вы можете использовать Angular свою собственную реализацию, предоставив ее как

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

Ответ 2

Наконец, он работает в финальной версии Angular2. Вам необходимо передать {skipLocationChange: true} при навигации по пути i.e.

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

Ответ 3

this.router.navigateByUrl('путь', {skipLocationChange: true}); также работал у меня.

В массиве Routes я также добавил свой путь для загрузки компонента, как показано ниже:

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

И в файле оттуда мне нужно заменить компонент, инициализировать объект маршрутизатора, как показано ниже, и позвонить в нужное место

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 );
    }