Angular $ compile返回注释而没有为Elements的nextElementSibling

时间:2015-11-13 18:34:44

标签: javascript angularjs

我已经编写了一个指令,如果将一个标志设置为“禁用”它们,则用跨度替换锚点。为此,我保留原始元素和替换元素,并根据需要进行交换。

然而,当元素也有像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>
});

我不知道他们为什么表现不同,他们应该产生相同的最终结果。我不能保留对元素的有效引用,除非它是从字符串模板构建的。

0 个答案:

没有答案