我有一个指令,我想有条件地包装它的内容,以启用此用法:
文本成为外部a的链接存在
我试图用这个链接功能来做到这一点:
link: function (scope, element, attrs) {
scope.$watch(attrs['conditionalWrap'], (value) => {
if (!value) {
element.replaceWith(element.contents());
}
});
}
这确实有效,但仅限于1个方向。因此,如果指令在外部启用时呈现,并且观察的表达式发生更改,则会删除外部。但是,如果观看的表达式再次发生变化,则不会再添加外部标记。代码正在执行(调试器进入它)但它只是不起作用。元素参数也始终是模板的实例,因此它始终包含外部标记。
我错过了什么?
更新: 我发现的是,不知怎的,我失去了内心的内容。让我说我有这个:
<a href conditional-wrap="expression">
SOMETHING INSIDE!!!
</a>
当我进入范围时。$ watch如上所述,只要表达式为(且是)为true,元素参数就是整个片段。一旦我将表达式设置为false和范围。$ watch运行并替换元素,后续运行(当表达式更改时)将其作为元素参数:
<a href conditional-wrap="expression"></a>
内部内容缺失,但是此指令呈现的html仍然是内部内容。
UPDATE2:这是一个非常简单的例子,演示了元素中内部HTMl的丢失,但实际上是渲染它。 http://jsfiddle.net/oxp5zxag/
UPDATE3:这是_.replaceWith()函数的一个问题,它似乎没有做直观的事情,让我看看我是否想出来