角度2: 不改变 URL 的路由

如何在不改变 URL 的情况下在 Angular 2应用程序中路由?(这是因为该应用程序位于 Django 应用程序页面上的几个标签之一下,在那里它适合保持 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}]);

然后网址将看起来像 http://localhost:8000/django_url/user/123

当我在 Angular 2应用程序中导航时,网址是否可能保持不变?所以当用户在页面 user/123时,URL 将保持为 http://localhost:8000/django_url

谢谢!

78548 次浏览

更新

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

更新

有一个公关直接支持这个 https://github.com/angular/angular/pull/9608

相关问题

原创的

您可以实现类似于 BrowserPlatformLocation 浏览器平台位置的自定义 PlatformLocation,但不调用 othistory.pushState()history.replaceState()history.back()history.forward(),而是在本地数组中维护更改。

然后,您可以使 Angular 使用您的自定义实现,方法是提供

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

最后它的工作在 Angular2最终发布。导航到路径时,需要传递{ skipLocationChange: true }。

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

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