没有为带有结束标记的元素调用指令,但在自闭合时工作正常

时间:2014-05-02 17:33:29

标签: angularjs angularjs-directive

我正在编写一个指令来简化我的HTML,但是它没有应用于编写为<blah></blah>的元素,即使它被调用为写为<blah />的元素:

HTML:

<search-filter type="text" name="query" update="doSearch()"/>
<search-filter type="bool" name="xp">XP Levels</search-filter>
<search-filter type="bool" name="lotd">LOTDs</search-filter>

指令:

angular.module("blah", [])
.directive("searchFilter", function($compile) {
    return {
        restrict: "E",
        terminal: true,
        priority: 1000,
        compile: function(element, attrs) {
            element = angular.element(element);
            console.log(element);
            switch (element.attr("type")) {
            case "text":
                //do stuff
                break;
            case "bool":
                //do stuff
                break;
            }
        }
    };
})

它适用于第一个元素,它是自动关闭的,但不适用于其他元素。

1 个答案:

答案 0 :(得分:1)

在HTML 5中,<search-filter />表示<search-filter>。因此,您永远不会关闭阻止其他两个元素工作的第一个元素。全部使用<search-filter></search-filter>,它会正常工作。

From W3C

  

如果元素是void元素之一,或者元素是   一个外来元素,那么可能有一个U + 002F SOLIDUS字符   (/)。此字符对void元素没有影响,但对外部元素没有影响   元素它将开始标记标记为自动关闭。

您的指令被视为 void element 。外部元素只是MathML名称空间和SVG名称空间中的元素。