Angularjs:如何克隆元素,未插入

时间:2015-11-26 17:04:51

标签: angularjs

我有一个克隆其元素的指令,通过$ compile(myClone)(范围)传递克隆;并将其附加到DOM。

如果原始元素已转换内容,例如:This is some content {{withVariable}}

如何在未插入angularjs表达式的情况下克隆它,以便克隆元素具有表达式(因此与原始表达式具有相同的动态内容),而不是克隆时解析的值?

如果我使用ng-bind指令,它可以按需运行。

离。 This is some content <span ng-bind="withVariable"></span>

1 个答案:

答案 0 :(得分:1)

好的,我在我的指令上找到了使用transclude: true的解决方案。

然后我进入了链接功能:

link: function (scope, element, attrs , uiScrollpoint, transclude ){
    transclude(scope, function(clone, scope){
        // stash the un-interpolated innerHTML
        element[0].srcHTML = clone[0].innerHTML;
        element.append($compile(clone)(scope));
    });
}

当我克隆元素时,我会在编译之前检索srcHTML:

var myClone = element.clone();
if(element[0].srcHTML){
    myClone[0].innerHTML = element[0].srcHTML;
}
$compile(myClone)(scope);

它似乎有效,但我确实看到了如果原始元素的源被JS DOM操作函数动态修改的限制,srcHTML将不会保持同步。我认为这是一个非常罕见的情况。

也许有更好的方法可以做到这一点?如果可以在克隆时获得未插入的HTML,而不仅仅是在翻译时,那将是最好的。