0

У меня есть некоторые государства, которые выглядят следующим образом:Маршрутов в UI Router углового JS (URL Shortcuts)

.state('patient.patient-login', { 
    abstract: true, 
    template: '<ui-view></ui-view>' 
}) 
.state('patient.patient-login.practiceID', { 
    url: "/patient-login/:practiceID", 
    scope: true, 
    templateUrl: "views/patient-login.html" 
}) 

Проблема в том, переменной :practiceID может быть довольно долго и не дружественным к пользователю, я хочу, чтобы дать пользователь может создать собственный URL-адрес, привязанный к идентификатору практики, например, в Facebook при создании учетной записи, с которой вы начинаете с URL-адреса профиля: http://facebook.com/123456789, но затем вы можете изменить его на http://facebook.com/whateveryouwant

Так что, по существу, Я хочу сделать что-то вроде этого:

POINTER 
http://domain.com/companyname > http://domain.com/#/patient-login/companyid 

ANOTHER EXAMPLE 
http://domain.com/ladentist > http://domain.com/#/patient-login/-85k3jfGEioltold 

Я смог разрешить пользователю устанавливать их unique url, но я не уверен, как даже начать настройку такой маршрутизации?

+0

Рассмотрите возможность создания маршрута на своем веб-сайте, например domain.com/link/:slug. Где-то в вашем приложении у вас будет сопоставление между стенографией и полными URL-адресами, и вы можете контролировать этот маршрут контроллером. –

ответ

0

Не знаете, как выглядит ваш проект, но вы можете обновить свое состояние, чтобы обрабатывать как id, так и уникальные URL-адреса в свойстве resolve. Что будет примерно выглядеть так:

.state('patient.patient-login.practiceID', { 
    url: "/patient-login/:practice", 
    scope: true, 
    templateUrl: "views/patient-login.html", 
    resolve: { 
    patientData: [ 
     '$stateParams', 
     'practiceSvc', // replace practiceSvc with however you are fetching data from your server 

     function($stateParams, practiceSvc) { 
     // check if the :practice param is an id or unique url 
     if ($stateParams.practice === /* id check */) { 
      // Call to API - get practice by ID 
      return practiceSvc.getByID($stateParams.practice); 
     } else { 
      // Call to API - get practice by unique url 
      return practiceSvc.getBySlug($stateParams.practice); 
     } 
     } 
    ] 
    } 
}) 

Это предполагает, что вы можете отличить уникальный URL-адрес и идентификатор. Если вы не можете этого сделать, вы можете обновить его, чтобы сначала проверить идентификатор, а затем уникальный URL-адрес, если никакая практика не найдена.

+0

Как я могу сделать это из корневого URL (например: 'http: // domain.com/id' vs' http: // domain.com/patient-login/id' – Jordash

+0

Если вы имеете в виду 'http: // domain .com/id' на 'http: //domain.com/#/patient-login/id', вы можете обработать это с помощью группового шаблона на стороне сервера. Я просто не уверен, что это будет мешать угловому (хотя вы, вероятно, можете проверить # и быть в порядке) Другим вариантом было бы создать подпапку на том же уровне, что и ваш основной файл 'index.html', и поместить в нее новый файл index.html, который будет просто обрабатывать переадресацию для входа в логин: 'login/index.html'. Внутри' login/index.html' будет функция переадресации, которая просто просматривает URL-адрес и преобразует его в угловой маршрут. – csbarnes

+0

это хорошая идея, как бы я делал динамику подпапки, хотя, URL-адрес должен основываться на названии компании 'example: http: // doma in.com/companyname/' – Jordash