AngularJS - 是否可以在指令名称中加下下划线?

Mil*_*hev 4 naming-conventions angularjs angularjs-directive


我有角度指令的命名约定和角度规范化我的指令名称的方法有问题.
为了遵循现有项目中的一些命名约定,我想要添加角度,我需要以这样的方式用"_"命名我的自定义指令:

app.directive("directive_name", function(...) {...});
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这样做似乎与Angular的指令名称规范化方式相矛盾,因此这些指令被忽略,未编译,因此未在屏幕上显示.

[问题]
是否可以以这样的方式命名指令,以后我们可以在HTML中使用它,如下所示:

<body>
    ...
    <my_directive></my_directive>
</body>
Run Code Online (Sandbox Code Playgroud)

感谢您的时间和帮助!

Bog*_*luk 9

是的,这是可能的,但你需要在camelCase中声明它:

app.directive("directiveName", function(...) {...});
Run Code Online (Sandbox Code Playgroud)

HTML

<my_directive></my_directive>
Run Code Online (Sandbox Code Playgroud)

但是imho - 更好,用破折号

<my-directive></my-directive>
Run Code Online (Sandbox Code Playgroud)

实际上,angular会从html中规范化指令名称,如下所示:

  1. 剥离x-data-从元素/属性的前面.
  2. 转换:,-_-delimited名驼峰.


mar*_*v00 5

你可以在你的指令名称上使用低破折号,你只需要像以下一样编写你的指令名称:

app.directive("yourDirectiveName", function(...) {...});
Run Code Online (Sandbox Code Playgroud)

而且只在你的代码中使用低破折号:

<your_directive_name></your_directive_name>
Run Code Online (Sandbox Code Playgroud)

也许取决于您使用的angularjs的版本,但您的html标记名称和指令名称之间的匹配是由jqLit​​e函数camelCase生成的

https://github.com/angular/angular.js/blob/v1.0.x/src/jqLit​​e.js#L106

正如您所看到的,由于使用了正则表达式,您可以使用低破折号:

SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
Run Code Online (Sandbox Code Playgroud)