2017-01-05 4 views
9

URLエンコードを無効にしたいと思います。角2はURLエンコードを無効にします

私はこれを以下に使用します。

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

urlがこの

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

のようなものです私はそれはかなりURLエンコードを無効にする方法はあり

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

以下のようになりたいですか?

+0

これを確認してください。http://stackoverflow.com/questions/22944932/angularjs-resource-how-to-disable-url-entity-encoding – Deep

+0

@Deep、あなたのリンクは角度1です。これは少し異なります。 – Derrick

答えて

17

Angular2はデフォルトでencodeURIComponent()を使用してURLにqueryParamsをエンコードしますが、カスタムURLシリアライザを作成して既定の機能をオーバーライドすることで回避できます。

私の場合、カンマ(、)を(%2)に置き換えないように、Angular2は避けたかったのです。私はlang = en-us、en-ukとしてQueryを渡していましたが、lang = en-us%2en-ukに変換されていました。私はそれを働いた方法をここで

:あなたのメインappModule.ts

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

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

これはあなたのデフォルトを壊さないことに線の下に追加

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

CustomUrlSerializer.ts機能性を備え、必要に応じてURLを管理します。

+0

うわー、すごいこと、ありがとう! – Jason

+0

両方のメソッドでDefautlUrlSerializerを呼び出すのではなく、DefautlUrlSerializerを拡張しますか?私はそれがよりクリーンで簡単なアプローチになると感じています。 –

+0

@EnzamHossainはい、単一のインスタンスを作成してそれを使用することで、よりクリーンなアプローチに進むことができます。我々は @NgModule({:[{提供:UrlSerializer、useClass:CustomUrlSerializer}] プロバイダ を})モジュールでこれを使用するときに –

-1

URLは次のようになります。

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

しかし、あなたはそれを消費するとき、それは問題をもたらすことはありません。あなたは、「プロファイル」経路について、次のようなコードで「canActive」ガード設定した場合:

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

そして、あなたはhttp://localhost:4200/profile;tags=one%2Ctwoに移動し、コンソールで{tag: one, two}が表示されます。あなたがそれを消費するとき、それは「1つ、2つ」です。もちろん、このコード化されたURLをコピーして、他の人に送信して使用することもできます。

+0

こんにちは、私はそれが何の問題もなく機能することを、私はかなりか魅力的なURLを読むように解決策を見つけることを試みていたことを感謝します。 – Jason

+0

エンコーディングが問題を引き起こすので、私はこれを読んでいます – BenRacicot

関連する問題