angularjs - Angular ui.router ui-sref 替换 url 字符 - 美化

标签 angularjs angular-ui-router ui-sref

我正在寻找一种可能性来替换 ui-sref 中的字符,尊重目标的 URL。

.state('base.product.detail', {
    url: 'detail/:productName-:productId/'

URL 现在看起来像:

Now: 
http://localhost/detail/My%20Product%20Name-123456789/

Should:
http://localhost/detail/My-Product-Name-123456789/

我想去掉 %20(也是在 ui-sref=""内部直接生成的)并用减号 (-) 替换它们。

有什么想法可以做到吗?

问候,马库斯

最佳答案

注册一个用于编码和解码数据的自定义类型。文档在这里:http://angular-ui.github.io/ui-router/site/#/api/ui.router.util .$urlMatcherFactory

让我们定义一个自定义类型。实现编码、解码、is 和模式:

  var productType = {
    encode: function(str) { return str && str.replace(/ /g, "-"); },
    decode: function(str) { return str && str.replace(/-/g, " "); },
    is: angular.isString,
    pattern: /[^/]+/
  };

现在使用 $urlMatcherFactoryProvider 将自定义类型注册为“产品”:

app.config(function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider) {
  $urlMatcherFactoryProvider.type('product', productType);
}

现在将您的 url 参数定义为产品,自定义类型将为您进行映射:

  $stateProvider.state('baseproductdetail', {
    url: '/detail/{productName:product}-:productId/',
    controller: function($scope, $stateParams) { 
      $scope.product = $stateParams.productName;
      $scope.productId = $stateParams.productId;
    },
    template: "<h3>name: {{product}}</h3><h3>name: {{productId}}</h3>"
  });

工作中的问题:http://plnkr.co/edit/wsiu7cx5rfZLawzyjHtf?p=preview

关于angularjs - Angular ui.router ui-sref 替换 url 字符 - 美化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918231/

相关文章:

javascript - 如何使用多种子状态组合来简化 angular-ui-router 嵌套状态?

javascript - Angular ui路由器后退按钮问题

jquery - 在 Angular 中使用 ui-sref 时出现错误 : Invalid state ref '' ,

javascript - 如何克隆 ui-sref

javascript - 将字符串与模板中的范围变量连接起来

javascript - # 出现在 UI.Router 的 URL 中

javascript - 为什么类型为 ="number"的输入不显示对其绑定(bind)值的更新?

AngularJS : directive scope inheritance

AngularJS:如何使用UI路由器具有默认的嵌套状态?

javascript - Angular UI-router - 尽管 $stateParams 获取对象,但不填充参数