AngularJS指令限制A和E
我正在一个小团队中工作,在AngularJS中进行构build,并试图保持一些基本的标准和最佳实践。 特别是因为我们对Angular相对较新。
我的问题是关于指令。 更准确地说, restrict
选项。
我们中的一些人正在使用restrict: 'E'
因此在html中有<my-directive></my-directive>
。
其他人正在使用restrict: 'A'
并在HTML中有<div my-directive></div>
。
那么当然,你可以使用restrict: 'EA'
并使用上面的任意一个。
目前没有什么大不了的,但是当这个项目规模巨大的时候,我希望任何人都能够很容易的理解到底发生了什么。
做事情的属性或元素方式有利还是弊?
是否有任何我们应该知道的陷阱,如果select说元素超过属性?
根据文件 :
什么时候应该使用属性与元素? 当您创build一个控制模板的组件时使用一个元素。 常见的情况是当您为模板的某些部分创build特定于域的语言时。 在用新function装饰现有元素时使用属性。
编辑下面的陷阱评论一个完整的答案:
假设您正在构build一个应该在Internet Explorer <= 8上运行的应用程序,AngularJS 1.3已经从AngularJS团队中删除了支持,您必须按照以下说明操作: https://docs.angularjs .ORG /导向/即
restrict是定义指令types,它可以是A
(Attribute), C
(Class), E
(Element)和M
(coMment),假设指令的名字是Doc
:
types:用法
A =
<div Doc></div>
C =
<div class="Doc"></div>
E =
<Doc data="book_data"></Doc>
M =
<!--directive:Doc -->
限制选项通常设置为:
- 'A' – 只匹配属性名称
- 'E' – 只匹配元素名称
- 'C' – 只匹配类名
- 'M' – 只匹配评论
这里是文档链接 。
IE8开箱不支持元素,你必须做一些工作,使IE8接受自定义标签。
在元素上使用属性的一个优点是可以将多个指令应用于同一个DOM节点。 这对于表单控件来说尤其方便,您可以使用其他属性突出显示,禁用或添加标签等,而无需将元素包装在一堆标签中。
我知道的一个陷阱就是自定义元素的IE问题。 从文档引述:
3)你不使用自定义元素标签,如(使用属性版本代替)
4)如果你使用自定义元素标签,那么你必须采取这些步骤,使IE 8和以下的开心
<!doctype html> <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName"> <head> <!--[if lte IE 8]> <script> document.createElement('ng-include'); document.createElement('ng-pluralize'); document.createElement('ng-view'); // Optionally these for CSS document.createElement('ng:include'); document.createElement('ng:pluralize'); document.createElement('ng:view'); </script> <![endif]--> </head> <body> ... </body> </html>
陷阱:
- 使用自己的html元素(如
<my-directive></my-directive>
无法在IE8上工作( https://docs.angularjs.org/guide/ie ) - 使用自己的html元素将使htmlvalidation失败。
- 具有相同参数的指令可以这样做:
<div data-my-directive="ValueOfTheFirstParameter"></div>
而不是这个:
<my-directive my-param="ValueOfTheFirstParameter"></my-directive>
我们不使用自定义的html元素,因为如果这2个事实。
第三方框架的每个指令都可以用两种方式来编写:
<my-directive></my-directive>
要么
<div data-my-directive></div>
也一样。
法律限制值是:
- E表示元素名称
- A为属性
- C为Class
- M表示评论
默认情况下,值是EA ,这意味着元素名称和属性名称都可以调用该指令。
2个元素的问题:
- 旧的浏览器支持不好。
- SEO – Google的引擎不喜欢它们。
使用属性。