2016-05-05 38 views
33

Làm cách nào tôi có thể định tuyến trong ứng dụng Góc 2 mà không thay đổi URL? (Điều này là bởi vì các ứng dụng nằm dưới một trong số các tab trên một trang của một ứng dụng Django, nơi đó là thích hợp để rời khỏi URL không thay đổi.)Góc 2: định tuyến mà không thay đổi URL

hiện tôi có một cái gì đó như thế này bên app.component.ts

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

và bên trong nói HomeComponent, chuyển hướng đến một trang người dùng sử dụng như sau

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

thì url sẽ trông giống như http://localhost:8000/django_url/user/123

có thể thay đổi url khi tôi điều hướng trong ứng dụng Angular 2 không? do đó, url sẽ ở lại http://localhost:8000/django_url khi người dùng ở trên trang user/123?

Cảm ơn!

+0

Xin chào, tôi đang gặp phải vấn đề tương tự. Bạn đã tìm thấy giải pháp cho vấn đề của mình chưa? Tôi đang sử dụng Angular2 RC4 – Kosmonaft

Trả lời

36

Cập nhật

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

Cập nhật

Có một PR để hỗ trợ này trực tiếp https://github.com/angular/angular/pull/9608

vấn đề liên quan

gốc

Bạn có thể thực hiện một tùy chỉnh PlatformLocation tương tự như BrowserPlatformLocation nhưng thay vì gọi ot history.pushState(), history.replaceState(), history.back(), và history.forward() duy trì thay đổi trong một mảng địa phương.

Sau đó, bạn có thể tận dụng góc thực hiện tùy chỉnh của bạn bằng cách cung cấp nó như

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

hiện tại tôi không gọi 'history.pushState()', 'history.replaceState()' hoặc khác. bạn có thể chỉ cho tôi một số tài nguyên liên quan đến 'pushState' và' PlatformLocation'? cảm ơn! – totoro

+0

Bạn không nhưng router thực hiện thông qua 'PlatformLocation'. Đây là những gì cập nhật URL. Nếu bạn cung cấp triển khai tùy chỉnh cho 'PlatformLocation', bạn có thể ngăn điều này. Tôi chưa nghĩ nhiều về điều này. Có lẽ bạn chỉ có thể cung cấp một triển khai thực hiện không có gì và không cần phải duy trì bất kỳ trạng thái nào. Hầu hết điều này chỉ là làm cho các nút quay lại/tiến tiếp hoạt động. Nếu bạn không phản ánh điều hướng trong URL, điều này có thể không có ý nghĩa. –

+0

bạn có thể đưa ra một ví dụ (hoặc chỉ cho tôi một số tài nguyên) về cách triển khai 'PlatformLocation' tùy chỉnh này và vị trí đặt nó? cảm ơn một lần nữa! – totoro

11

Cuối cùng làm việc trong Angular2 phát hành cuối cùng. Bạn cần phải vượt qua {skipLocationChange: true} trong khi điều hướng đến đường dẫn ví dụ:

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

Làm cách nào để thực hiện {skipLocationChange: true} khỏi thẻ neo? –

+0

Awsome ... Hoạt động cho tôi ... –

+0

Có cách nào để thực hiện điều này trên toàn cầu để mọi cuộc gọi đơn lẻ đến 'điều hướng' không cần các thông số này được chuyển vào? –

0

this.router.navigateByUrl('path', { skipLocationChange: true }); cũng làm việc cho tôi.

Trong Routes mảng Tôi cũng đã thêm con đường của tôi để nạp một thành phần như sau:

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

Và trong file từ đó tôi cần phải thay thế các thành phần, khởi router đối tượng như dưới đây và gọi tại nơi yêu cầu

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); 
    } 
Các vấn đề liên quan