2016-05-05 4 views
33

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

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

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

и внутри говорят 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?

Спасибо!

+0

Привет, У меня такая же проблема. Вы нашли решение для своей проблемы? Я использую Angular2 RC4 – Kosmonaft

ответ

36

Update

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

Update

Существует пиар, чтобы поддержать это непосредственно 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})]); 
+0

, в настоящее время я не называю 'history.pushState()', 'history.replaceState()' или другие. можете ли вы указать мне некоторый ресурс относительно 'pushState' и' PlatformLocation'? благодаря! – totoro

+0

Вы не используете маршрутизатор через 'PlatformLocation'. Это то, что обновляет URL-адрес. Если вы предоставили пользовательскую реализацию для «PlatformLocation», вы можете предотвратить это. Я еще много об этом не думал. Возможно, вы можете просто предоставить реализацию, которая ничего не делает, и нет необходимости поддерживать какое-либо состояние. Большая часть этого - просто заставить кнопки «назад/вперед» работать. Если вы не учитываете навигацию по URL-адресу, это может и не иметь смысла. –

+0

Можете ли вы привести пример (или указать мне на некоторые ресурсы), как реализовать эту настраиваемую платформу «Место размещения» и куда ее поместить? еще раз спасибо! – totoro

11

Наконец его работа в Angular2 окончательном освобождении. Вам необходимо пройти {skipLocationChange: истинно} во время навигации по пути т.е.

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

Как сделать {skipLocationChange: true} из тега привязки? –

+0

Awsome ... Работает для меня ... –

+0

Есть ли все-таки сделать это глобально, чтобы каждый вызов 'navigate' не нуждался в данных параметрах? –

0

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

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

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

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

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); 
    } 
Смежные вопросы