2013-07-07 2 views
1

Что я, что делает локализованы URLs как:Как добавить динамический префикс AngularJS маршрутов

Позвольте притвориться, что мы всегда знаем пользовательский язык.

angular.module('website', []) 
.constant('ROUTES', (function() { 
    var lang = 'eng'; // just for example 
    return { 
     SOME_PATH: '/' + lang + '/somepath' 
    } 
})()) 
.config([..., '$locationProvider', 'ROUTES', function(..., $locationProvider, ROUTES { 
    $routeProvider.when(ROUTES.SOME_PATH, {templateUrl: 'pages/some_page.html', controller:  'SomePageController'}); 
    $locationProvider.html5Mode(true); 
}]) 
.run(['$rootScope', 'ROUTES', function ($rootScope, ROUTES) { 
    $rootScope.ROUTES = ROUTES; 
}]); 

Так что, если я добавить ссылку в HTML, everithing работы:

<a href="{{ROUTES.SOME_PATH}}">Some path</a> 

После я нажмите работу маршрутизации ссылку так же, как планировалось. Но если я обновляю страницу или пришел по прямой ссылке («http://example.com/eng/somepath»), я не могу связаться ни с одной страницей, ни со страницы 404.

+0

Адрес: # # # # # # # # # # # # # # # # # # http://mysite.com/rus/somepath должен быть http://mysite.com/#/eng/somepath или браузер будет запрашивать совершенно другой URL-адрес с сервера. Только настройки сервера могут перенаправить обратно для вас. – lossleader

+0

@lossleader Вам не нужно '#', поскольку '$ locationProvider' имеет значение html5Mode, равное true –

+0

Да, это потому, что $ locationProvider.html5Mode (true); В браузере без поддержки html5 режим «#» будет существовать. –

ответ

2

Не было бы проще отобразить маршрут с помощью маршрута $ routeProvider?

$routeProvider.when('/:langId/:somepath', 
    { 
    controller: 'languageHandlingController' 
    }) 
+0

Это может сработать, я должен попробовать –

+0

Итак, это работа, но только в движении: langId param в конец URL: http: // mysite.com/somepath/ger. Может быть, это причина «#» в url –

+0

, он должен работать в обоих направлениях. возможно, это что-то в вашем контроллере. если вы хотите опубликовать больше кода, я могу попытаться вам помочь. – pasine

0

Я думаю, что лучший вариант будет иметь URL-адреса, чтобы быть чем-то вроде http://mysite.com/somepath?lang=en, а затем вы можете просто прочитать lang прямо с URL-адреса, где вам нужно.

+0

Да, это более традиционный путь. Единственная причина в том, что kepp url очищается от дополнительных параметров get. И, imho, URL-адреса вроде http://mysite.com/ger/somepath выглядят довольно красиво –

Смежные вопросы