web-dev-qa-db-fra.com

angular 2 désactiver l'encodage d'URL

Je voudrais désactiver l'encodage d'URL.

Quand j'utilise ceci ci-dessous.

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

L'URL est comme ça

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

Je voudrais que ce soit comme ci-dessous

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

Existe-t-il un moyen de désactiver le codage URL?

14
Jason

Angular2 utilise par défaut encodeURIComponent () pour coder queryParams dans URL, vous pouvez l'éviter en écrivant un sérialiseur d'URL personnalisé et remplacer la fonctionnalité par défaut.

Dans mon cas, je voulais éviter Angular2 pour éviter de remplacer la virgule (,) par (% 2). Je passais Query comme lang = en-us, en-uk où il était converti en lang = en-us% 2en-uk.

Voici comment j'ai travaillé:

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

Ajoutez la ligne ci-dessous à votre appModule.ts principal

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

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

Cela ne cassera pas votre fonctionnalité par défaut et ne prendra pas soin de l'URL selon vos besoins.

30
jigar gala