Angular js – route-ui adicionar parmeter padrão

No meu aplicativo eu uso o roteador de interface do usuário angular.

Eu tenho locais (Inglês e Hebraico). Minha língua base é o Inglês.

É por isso que eu quero, se o idioma é inglês, não adicionar o parâmetro ao url

Por exemplo:

  • Inglês em casa -> http://example.com/
  • Home Hebraico -> http://example.com/he/

  • Sobre nós Português -> http://example.com/about

  • Sobre nós Hebraico -> http://example.com/he/about

Isso é possível ?

Este é o meu código atual

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

Há um plunker de trabalho

Como sempre, isso é viável com os resources incorporados do UI-Router . Em primeiro lugar, apresentamos o estado super-pai chamado, por exemplo, ‘root’. Teria definido parâmetro lang

 .state('root', { url: '/{lang:(?:en|he|cs)}', abstract: true, template: '
', params: {lang : { squash : true, value: 'en' }} })

Coisas interessantes para mencionar: A url usa regexp para reduzir a quantidade de palavras lang correspondentes (no nosso caso, inglês, hebraico e tcheco) :

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

Leia mais, por exemplo, aqui .

Além disso, aproveitamos uma configuração chamada params : {} . Ele diz que o valor padrão é 'en' e o que é mais importante – ele deve ser esmagado, ignorado se houver uma correspondência com o valor do ‘en’ param:

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

Leia mais por exemplo aqui ou aqui

Então, este é o nosso pai, o estado raiz, que nós aplicamos a todos os estados com um parent : 'root' configuração de definição de estado 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' }); 

E agora esses links funcionariam:

ui-sref Inglês:

 home({lang: 'en'}) activity({lang: 'en'}) page({pagename:'one', lang: 'en'}) 

ui-sebr hebraico:

 home({lang: 'he'}) activity({lang: 'he'}) page({pagename:'two'}) 

href Inglês:

 #/ #/activity #/page/three 

href hebraico:

 #/he/ #/he/activity #/he/page/three 

Confira em ação aqui