UI路由器Angular JS中的自定义路由(URL快捷方式)

时间:2016-06-06 17:54:24

标签: angularjs angular-ui-router angular-ui-router-extras

我有一些看起来像这样的状态:

.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变量可能很长而且不是用户友好的,我想让用户能够创建一个与练习ID绑定的自定义URL,例如在创建时在Facebook上您开始使用个人资料网址开设的帐户: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,但我不确定如何开始像这样设置路由?

1 个答案:

答案 0 :(得分:0)

不确定项目的其余部分是什么样的,但您可以更新状态以处理resolve属性中的id和唯一网址。大致如下所示:

.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);
        }
      }
    ]
  }
})

这假设您可以区分唯一网址和ID。如果你不能这样做,你可以更新它以先检查id,如果没有找到练习,则检查唯一的URL。