当前位置: 首页 > 面试题库 >

角度ui.router ui-sref替换URL字符-美化

叶明辉
2023-03-14
问题内容

我正在寻找一种可能替换掉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

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

  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



 类似资料:
  • 问题内容: 我的路由器看起来像这样: 但是当我使用 与我期望它变成而是我得到。 如何使它通过参数而不进行编码? 问题答案: 如此处所述,您需要为URL参数声明自定义变量类型,以使斜杠不被编码。引用来自github的评论: 如果您确实不希望为斜杠编码,请在regexp中注册一个自定义类型,然后声明item_id为您的自定义类型,即url:/ {item_id:MyType}

  • 我正在努力解决一个关于正则表达式的小问题。 我想用另一个长度相同但字符不同的子字符串替换特定字符的所有奇数长度子字符串。指定字符的所有偶数序列应保持不变。 一个字符串包含字母a、b和y,y的所有奇数长度序列都应替换为z: 另一个可能的例子是: 变成 使用正则表达式匹配所有奇数长度的序列没有问题。 不幸的是,我不知道如何将这些匹配的长度信息合并到替换字符串中。我知道我必须以某种方式使用反向引用/捕获

  • 问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要

  • 我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想用“”替换它。它并没有用空白代替“和”。下面是我的逻辑示例。当我调试这个的时候,逻辑就落在句子里了。代替 这里有我遗漏的东西吗。

  • 我正在自己学习Java,并使用在线练习进行练习。到目前为止,我只学到了直到方法,所以在这个练习中使用数组超出了我的范围,即使一些在线解决方案使用数组来做我想做的事情。 练习是这样的:让用户输入一个带有元音的字符串。只要有元音字母,就将该元音显示为大写字母。 例如:如果用户输入“苹果”,正确的输出是苹果 到目前为止,我有这段代码: 当我运行我的代码时,例如,输入字符串“苹果”,我得到“苹果”作为我的

  • 问题内容: 我有一列包含网址(ID,网址)的列: 我想将“更新”一词更改为“新闻”。是否可以使用脚本执行此操作? 问题答案: 现在的行就像 将会 http://www.electrictoolbox.com/mysql-find-replace- text/