我已经编写了一个指令,如果将一个标志设置为“禁用”它们,则用跨度替换锚点。为此,我保留原始元素和替换元素,并根据需要进行交换。
然而,当元素也有像ng-if
这样的Angular指令时,这会让人感到痛苦 - 因为在$compile
角度期间,带有注释的模板会污染模板。
我发现当我编译一个字符串模板时,我可以通过nextElementSibling
访问我想要的实际元素(返回的节点是Comment
)。
然而,当我编译实际的Element
时,这会失败。我得到的全部是Comment
。
// Compiling with an Element
var $span = document.createElement('span');
$span.setAttribute('ng-if', true);
var $compiled = $compile($span)($scope);
$timeout(function() {
console.log($compiled[0], $compiled[0].nextElementSibling);
// => <!-- ngIf: true --> null
});
// Compiling with a string template
var span = '<span ng-if="true"></span>'
var $compiled = $compile(span)($scope);
$timeout(function() {
console.log($compiled[0], $compiled[0].nextElementSibling);
// => <!-- ngIf: true --> <span ng-if="true" class="ng-scope"></span>
});
我不知道他们为什么表现不同,他们应该产生相同的最终结果。我不能保留对元素的有效引用,除非它是从字符串模板构建的。