使用自关闭标记时不显示AngularJS元素指令

Haw*_*awk 18 directive angularjs

我有我的html文件指令

<add />
<back />
Run Code Online (Sandbox Code Playgroud)

并且指令在表格上

.directive('add', ['$window', ...
Run Code Online (Sandbox Code Playgroud)

.directive('back', ['$window', 
Run Code Online (Sandbox Code Playgroud)

这很好用.

如果我将指令更改为驼峰案例:

.directive('addPlayer', ['$window', ...

<add_player />
<back />
Run Code Online (Sandbox Code Playgroud)

<add:player />
<back />
Run Code Online (Sandbox Code Playgroud)

显示很好而

<add-player />  regular dash
<back />
Run Code Online (Sandbox Code Playgroud)

仅显示<add-player>,之后的所有内容均未显示.

有什么想法吗?

编辑:

我在这里得到了同样的行为

http://plnkr.co/edit/cpP4c2TyZwv5Y4BrNUBb?p=preview

bPr*_*tik 35

为了让你的问题得到休息,我引用了AngularJS团队的官方声明:(原文如此)

html规范定义的自闭或空元素对于浏览器解析器来说非常特殊.你不能自己做,所以对于你的自定义元素你必须坚持非空元素(<foo></foo>).

这不能改变角度.

- IgorMinar

来源:https://github.com/angular/angular.js/issues/1953#issuecomment-13135021

按照AngularJS问题页面上的其余对话,他们讨论了使用XHTML浏览器可接受的自闭标签提供内容的可能性.但请注意,AngularJS并不完全支持它.

  • 花了2个小时.从没想过自动关闭标签会如此烦人和危险.在使用Angular时,很长时间不会使用自动关闭标签.谢谢你的回答. (3认同)
  • @squirrelsereduck - React 使用 [JSX](https://reactjs.org/docs/introducing-jsx.html),它看起来非常像 HTML,但实际上并非如此。您链接到的代码不是直接注入浏览器的代码。将 `render`s 反应到 JavaScript。请参阅 [Babbel REPL](https://u.bpratik.in/2WZUe4d) 上的实际操作 (3认同)

naX*_*aXa 7

HTML规范不允许在非void元素上使用自动关闭标签。

HTML语法规则[ W3C ]

元素具有开始标记以指示它们的开始位置。非空元素具有结束标记以指示它们在何处结束。
开始标签由以下部分组成,并按照以下顺序排列:

  1. 一个“ <”字符。
  2. 元素的标签名称。
  3. 可选地,一个或多个属性,每个属性之前必须有一个或多个空格字符。
  4. (可选)一个或多个空格字符。
  5. 可选地,“ /”字符,仅当元素为void元素时才存在。
  6. 一个“>”字符。

HTML5规范中的void元素数量有限。以下是完整列表:

areabasebrcolcommandembedhrimginputkeygenlinkmetaparamsourcetrackwbr

到底发生了什么

浏览器的解析器必须听规范。由于在非void元素标记中使用斜杠无效,因此解析器将忽略结尾/><back />手段<back>。因此,您永远都不会关闭阻止其他元素起作用的第一个元素。

Plunker上,您有:

<body>
   <back></back>
   Self closing <back />
   Self closing <back />
</body>
Run Code Online (Sandbox Code Playgroud)

解析成

<body>
   <back></back>
   Self closing <back>
      Self closing <back>
    </back>
  </back>
</body>
Run Code Online (Sandbox Code Playgroud)

然后template: '<button>back</button>',您在指令上指定将指令back(及其子代)替换为指定的HTML,从而导致:

<body>
   <back>
       <button>back</button>
   </back>
   Self closing <back>
       <button>back</button>
   </back>
</body>
Run Code Online (Sandbox Code Playgroud)

那我该怎么办?

<back></back>全部使用,它将正常工作。或者,您可以使用元素属性:<div back="attr"></div>

有关更多详细信息,请参见以下讨论:


Mic*_*ord 6

我最近遇到了同样的问题,并设法通过不使用自闭标签来修复它.尝试<add-player></add-player>代替自动关闭版本.

我不知道为什么自闭标签不能与指令的标签名称中的短划线一起使用.在当天进行了快速研究,在HTML/XHTML方面没有找到任何内容.也许是Angular的bug /限制?