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> 

陷阱:

  1. 使用自己的html元素(如<my-directive></my-directive>无法在IE8上工作( https://docs.angularjs.org/guide/ie
  2. 使用自己的html元素将使htmlvalidation失败。
  3. 具有相同参数的指令可以这样做:

<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个元素的问题:

  1. 旧的浏览器支持不好。
  2. SEO – Google的引擎不喜欢它们。

使用属性。