如何在AngularJS中将dash-case转换为camelCase?

17

在 AngularJS 中有没有将连字符字符串转换为驼峰字符串的实用函数?例如:"min-max" 变成 "minMax"。

自己实现一个函数相当简单:

function toCamelCase(name) {
  return name.replace(/-(\w)/g, function(match) {
    return match[1].toUpperCase();
  });
}

但是,我知道Angular已经做到了这一点(例如指令名称),所以我想知道是否可以使用Angular已有的机制?

2个回答

50
你可以在指令内部访问 Angular 的驼峰命名函数:
link: function (scope, element, attrs) {
  attrs.$normalize('ng-model'); // ngModel
  attrs.$normalize('ng:click'); // ngClick
  attrs.$normalize('ng_show'); // ngShow
}

最好的!


4
先生,您真是一位学者和绅士!我不知道 $normalize 的存在。 - Ondrej Slinták
12
有人知道这个的反义词吗?也就是说,“ngModel” => “ng-model”是否有其他方法可以实现,除了使用"ngModel".replace(/([A-Z])/g, '-$1').toLowerCase();这个方法? - Campbeln
2
@Campbeln $normalize 处理各种输入格式,但你可以像 这样 做出任意格式的归一化处理。 - ricksmt
1
这段代码简单来说就是:"camelCase".replace(/[A-Z]/g, function(c) { return '-' + c.toLowerCase(); });,@ricksmt,你应该将其作为一个问题和答案发布。 - Ariel

9
在Angular中,这是jqlite的一部分,它是他们内部使用的极简jQuery实现。我不认为有访问该函数的方法,因为我认为它是私有的。不过,以下是该函数:
function camelCase(name) {
  return name.
    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
      return offset ? letter.toUpperCase() : letter;
    }).
    replace(MOZ_HACK_REGEXP, 'Moz$1');
}

在哪里

var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
var MOZ_HACK_REGEXP = /^moz([A-Z])/;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接