Jum angulaire – route-ui ajouter parmètre par défaut

Dans mon application, j'utilise UI-Router angulaire.

J'ai des locaux (anglais et hébreu). Ma langue de base est l'anglais.

C'est pourquoi je veux si la langue est l'anglais pour ne pas ajouter le paramètre à l'url

Par exemple:

  • Accueil English -> http://example.com/
  • Accueil hébreu -> http://example.com/he/

  • À propos de nous English -> http://example.com/about

  • À propos de nous hébreu -> http://example.com/he/about

Est-ce possible ?

C'est mon code actuel

 $stateProvider .state('/', { url: "/", templateUrl: "Assets/app/templates/home.html", controller: 'homeController' }) .state('activity', { url: "/activity", templateUrl: "Assets/app/templates/gallery.html", controller: 'galleryController' }) .state('page', { url: '/:pagename', templateUrl: "Assets/app/templates/page.html", controller: 'pageController' }); 

    Il y a un plongeur actif

    Comme toujours, cela est possible avec UI-Router – fonctionnalités intégrées. Tout d'abord, nous présentons l'état super parent appelé "racine" par exemple. Il aurait défini le paramètre lang

     .state('root', { url: '/{lang:(?:en|he|cs)}', abstract: true, template: '<div ui-view=""></div>', params: {lang : { squash : true, value: 'en' }} }) 

    Des choses intéressantes à mentionner: L' url utilise regexp pour réduire la quantité de mots Lang correspondant (dans notre cas, anglais, hébreu et tchèque) :

     url: '/{lang:(?:en|he|cs)}', 

    Lire plus, par exemple, ici .

    En outre, nous profitons d'un paramètre appelé params : {} . Il dit que la valeur par défaut est 'en' et ce qui est plus important – il devrait être écrasé, sauté s'il y a une correspondance avec 'en' param value:

     params: {lang : { squash : true, value: 'en' }} 

    En savoir plus, par exemple ici ou ici

    Donc, c'est notre parent, l'état racine, que nous allons appliquer à tous les états avec un paramètre de définition d'état parent : 'root' :

     .state('home', { parent: 'root', // parent will do the magic url: "/", templateUrl: "Assets/app/templates/home.html", controller: 'homeController' }) .state('activity', { parent: 'root', // parent magic url: "/activity", templateUrl: "Assets/app/templates/gallery.html", controller: 'galleryController' }) .state('page', { parent: 'root', // magic url: '/page/:pagename', templateUrl: "Assets/app/templates/page.html", controller: 'pageController' }); 

    Et maintenant, ces liens fonctionneraient:

    Ui-sref anglais:

     <a ui-sref="home({lang: 'en'})">home({lang: 'en'})</a> <a ui-sref="activity({lang: 'en'})">activity({lang: 'en'})</a> <a ui-sref="page({pagename:'one', lang: 'en'})">page({pagename:'one', lang: 'en'})</a> 

    Ui-sref hébreu:

     <a ui-sref="home({lang: 'he'})">home({lang: 'he'})</a> <a ui-sref="activity({lang: 'he'})">activity({lang: 'he'})</a> <a ui-sref="page({pagename:'two', lang: 'he'})">page({pagename:'two'})</a> 

    Href anglais:

     <a href="#/">#/</a> <a href="#/activity">#/activity</a> <a href="#/page/three">#/page/three</a> 

    Href hébreu:

     <a href="#/he/">#/he/</a> <a href="#/he/activity">#/he/activity</a> <a href="#/he/page/three">#/he/page/three</a> 

    Vérifiez-le en action ici