先扫下盲,本文的主角——AngularJS,是Google开源的一款JavaScript MVC框架,弥补了HTML在构建应用方面的不足,其通过使用指令(directives)结构来扩展HTML词汇,使开发者可以使用HTML来声明动态内容,从而使得Web开发和测试工作变得更加容易。

AngularJS自诞生以来,吸引了大量的目光,也迅速成为了Web开发领域的新宠。最近尝试在项目中引入AngularJS,却发现AngularJS的指令都是ng为前缀的,对于这种自定义属性名称,各种IDE也理所当然的提示不存在之类的信息。对于我这种追求完美的人,在写任何自定义属性都开始加上data-前缀的情况下,实在是不能容忍这玩意儿。

本来想搜一下如何自定义默认指令前缀,想替换掉诸如ng-app、ng-model、ng-bind之类的指令,不料却没什么人提及此问题

,可能我想的问题不是问题吧,因为是半路学习,没时间从最基本的官方文档看起(更多是因为英文不好),就随便翻阅几篇技术文章,不料在学习中却无意间看到有人说自定义指令如果想符合HTML5规范,可以加上data-*或者x-*前缀,对指令本身不影响,至于x-*,我又不知道是什么玩意儿了,但至少我知道data-*可以满足我的要求,写个自定义指令试了试,果然可以,于是顺手试试默认指令,发现ng-app、ng-model、ng-bind这类默认指令也可以直接加上data-*的前缀,而且完全不用配置,不影响功能。

所以,如上所述,为了遵循HTML5规范,我们也可以使用data-ng-app、data-ng-model、data-ng-bind这样的属性来使用AngularJS的默认指令了。

最后,在初步了解之后才有勇气看一眼源码,这才傻傻的发现,原来程序里面是这样写的

var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];

所以说,ng-、data-ng-、ng:、x-ng-,都是可以生效的。

记录一下,给像我一样初学的朋友一个便捷