Js angular – route-ui aggiunge il parmetro predefinito

Nella mia app utilizzo l’UI-Router angular.

Ho gente del posto (inglese ed ebraico) La mia lingua di base è l’inglese.

Ecco perché voglio se la lingua è l’inglese non aggiungere il parametro all’URL

Per esempio:

È ansible ?

Questo è il mio codice attuale

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

C’è un plunker funzionante

Come sempre, ciò è fattibile con l’ UI-Router – funzionalità incorporate. Innanzitutto, introduciamo lo stato di super genitori chiamato ad esempio ‘root’. Avrebbe definito il parametro lang

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

Cose interessanti da ricordare: l’ url usa regexp per ridurre la quantità di parole lang corrispondenti (nel nostro caso, inglese, ebraico e ceco) :

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

Leggi di più ad esempio qui .

Inoltre, params : {} impostazioni chiamate params : {} . Dice che il valore predefinito è 'en' e ciò che è più importante – dovrebbe essere schiacciato, saltato se c’è una corrispondenza con il valore del parametro ‘en’:

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

Leggi di più ad esempio qui o qui

Quindi, questo è il nostro genitore, stato root, che applicheremo solo a tutti gli stati con una definizione di stato 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 ora questi collegamenti funzionerebbero:

ui-sref inglese:

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

ui-sref ebraico:

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

inglese href :

 #/ #/activity #/page/three 

href ebraico:

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

Controlla qui in azione