Как создать маршрут AngularJS с тире вместо косой черты

Можно ли создавать маршруты Angular с тире вместо косой черты и переменным содержимым во фрагменте URL? Например:

В учебнике по Angular phone URL-адреса выглядят так, например:

http://angular.github.io/angular-phonecat/step-11/app/#/phones/motorola-xoom

это реализуется через провайдера маршрутов, например:

  when('/phones/:phoneId', {
    templateUrl: 'partials/phone-detail.html',
    controller: 'PhoneDetailCtrl'
  })

то, что я хотел бы сделать, это иметь URL-адреса, которые больше похожи на:

http://angular.github.io/angular-phonecat/step-11/app/#/phones/{{manufacturer}}--{{devicename}}--{{phoneid}}

где {{phoneid}} – это числовой ключ базы данных, а текст {{manufacturer}} будет варьироваться от телефона к телефону. Это потому, что мне нужен числовой ключ для управления моей базой данных, но я хочу, чтобы в URL-адресе был текст производителя и имени устройства (или мой эквивалент) для целей поисковой оптимизации....

По сути, я хотел бы сделать в Angular Routes то, что я могу сделать в файлах htaccess, где я бы сделал что-то вроде: RewriteRule ^(.)--by--(.)--(. *)$ phone.php?mfg=$1&devicename=$2&phoneid=$3

Я знаю, что маршруты Angular не поддерживают такие подстановочные знаки, но мне интересно, как я могу добиться такого эффекта. Или, может быть, есть какое-то расширение, которое позволяет это сделать?


person Mark Watkins    schedule 14.10.2014    source источник


Ответы (1)


Вы можете использовать переменную, используя :name в URL-адресе (источник)

В вашей конфигурации:

config(function($routeProvider, $locationProvider) {
    $routeProvider
    .when('/phones/:manufacturer--:devicename--:phoneid', {
          templateUrl: 'file.html',
          controller: 'PhoneController'
     });

Чтобы получить доступ к параметрам в вашем контроллере:

$routeParams.manufacturer
$routeParams.devicename
$routeParams.phoneid
person sayam    schedule 14.10.2014
comment
Гений. Это работает отлично. Не знал, что в URL можно указать более одной переменной. Спасибо! - person Mark Watkins; 14.10.2014