2017-01-05 23 views
9

Tôi muốn tắt mã hóa url.góc 2 tắt mã hóa url

Khi tôi sử dụng điều này bên dưới.

this.router.navigate(['/profile', { tags: 'one,two' }]); 

Url là như thế này

http://localhost:4200/profile;tags=one%2Ctwo 

Tôi muốn nó được khá như dưới đây

http://localhost:4200/profile;tags=one,two 

Có cách nào để vô hiệu hóa mã hóa url?

+0

kiểm tra http://stackoverflow.com/questions/22944932/angularjs-resource-how-to-disable-url-entity-encoding – Deep

+0

@Deep, liên kết của bạn dành cho góc 1, có một chút khác biệt. – Derrick

Trả lời

17

Angular2 theo mặc định sử dụng encodeURIComponent() để mã hóa truy vấnParams trong URL, bạn có thể tránh nó bằng cách viết serializer URL tùy chỉnh và ghi đè chức năng mặc định.

Trong trường hợp của tôi, tôi muốn tránh Angular2 để tránh thay thế dấu phẩy (,) theo (% 2). Tôi đã chuyển Query như lang = en-us, en-uk, nơi nó đã được chuyển đổi thành lang = en-us% 2en-uk.

đây làm thế nào tôi đã làm việc nó ra:

CustomUrlSerializer.ts

import {UrlSerializer, UrlTree, DefaultUrlSerializer} from '@angular/router'; 

export class CustomUrlSerializer implements UrlSerializer { 
    parse(url: any): UrlTree { 
     let dus = new DefaultUrlSerializer(); 
     return dus.parse(url); 
    } 

    serialize(tree: UrlTree): any { 
     let dus = new DefaultUrlSerializer(), 
      path = dus.serialize(tree); 
     // use your regex to replace as per your requirement. 
     return path.replace(/%2/g,','); 
    } 
} 

Thêm bên dưới dòng để appModule.ts chính của bạn

import {UrlSerializer} from '@angular/router'; 
import {CustomUrlSerializer} from './CustomUrlSerializer'; 

@NgModule({ 
    providers: [{ provide: UrlSerializer, useClass: CustomUrlSerializer }] 
}) 

này sẽ không phá vỡ mặc định của bạn chức năng và quan tâm đến URL theo nhu cầu của bạn.

+0

Wow, thật tuyệt vời, cảm ơn bạn rất nhiều! – Jason

+0

Thay vì gọi DefautlUrlSerializer trong cả hai phương pháp, sẽ mở rộng công việc DefautlUrlSerializer? Tôi cảm thấy đó sẽ là một cách tiếp cận rõ ràng và đơn giản hơn. –

+0

@EnzamHossain Vâng, chúng ta có thể đi cho các phương pháp tiếp cận sạch hơn bằng cách tạo ra một trường hợp duy nhất và sử dụng nó trên. –

-1

Url trông như thế này:

http://localhost:4200/profile;tags=one%2Ctwo 

Nhưng nó sẽ không mang lại bất kỳ vấn đề khi bạn tiêu thụ nó. Nếu bạn, đối với các tuyến đường 'hồ sơ', thiết lập một người bảo vệ 'canActive' với các mã như sau:

canActivate(route: ActivatedRouteSnapshot) { 
    console.log(route.params);} 

Và khi bạn điều hướng đến http://localhost:4200/profile;tags=one%2Ctwo, bạn sẽ thấy {tag: one, two} trong giao diện điều khiển. Vì vậy, khi bạn tiêu thụ nó, nó là 'một, hai'. Và tất nhiên, bạn có thể sao chép url được mã hóa này và gửi cho người khác để sử dụng.

+0

Xin chào, tôi đánh giá cao rằng nó hoạt động mà không có bất kỳ vấn đề gì, tôi đã cố gắng tìm một giải pháp giúp url trở nên hấp dẫn hoặc hấp dẫn để đọc. – Jason

+0

Tôi đang đọc điều này vì mã hóa không gây ra vấn đề – BenRacicot