AngularJS指令替换自身不会取代

时间:2015-02-24 08:06:25

标签: angularjs angularjs-directive

我有一个指令,我想有条件地包装它的内容,以启用此用法:

文本成为外部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()函数的一个问题,它似乎没有做直观的事情,让我看看我是否想出来

0 个答案:

没有答案