0

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

.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但我不知道如何开始设置这样的路由?

4

1 回答 1

0

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

.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 和 id 之间的区别。如果你不能这样做,你可以先更新它以检查 id,然后如果没有找到实践,则使用唯一的 url。

于 2016-06-06T18:31:58.977 回答