Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果删除并重新添加DOM元素,则ng单击绑定将丢失_Javascript_Angularjs_Angularjs Ng Click - Fatal编程技术网

Javascript 如果删除并重新添加DOM元素,则ng单击绑定将丢失

Javascript 如果删除并重新添加DOM元素,则ng单击绑定将丢失,javascript,angularjs,angularjs-ng-click,Javascript,Angularjs,Angularjs Ng Click,在删除DOM树()之后,我需要将以前编译的html重新添加回DOM树() 内容绑定仍按预期工作。e、 当范围变量发生变化时,任何{{someVariable}绑定都会用新值更新 但是,ng单击绑定停止工作。控制器上的关联函数将停止调用 。最初单击+按钮,您将看到计数器增量。但是在两次单击“切换”之后,+按钮不再工作,但是{{count}}绑定仍然会更新 请忽略控制器内的DOM操作。这只是为了简化程序。您通常会在指令中执行此操作。有关更实际的实现,请参见和。您必须首先使用所需的范围重新编译它 请看

在删除DOM树()之后,我需要将以前编译的html重新添加回DOM树()

内容绑定仍按预期工作。e、 当范围变量发生变化时,任何
{{someVariable}
绑定都会用新值更新

但是,
ng单击
绑定停止工作。控制器上的关联函数将停止调用

。最初单击+按钮,您将看到计数器增量。但是在两次单击“切换”之后,+按钮不再工作,但是{{count}}绑定仍然会更新


请忽略控制器内的DOM操作。这只是为了简化程序。您通常会在指令中执行此操作。有关更实际的实现,请参见和。

您必须首先使用所需的范围重新编译它

请看这里:

我首先编译模板,然后将其插入此行:

var targetFn = $compile(target);

您可以参考文档了解更多信息-

我很久没有使用jquery了,我忘记了一些问题

.detach()方法与.remove()方法相同,不同之处在于.detach()保留与已删除元素关联的所有jQuery数据。当删除的元素稍后要重新插入DOM时,此方法非常有用

当然,angular的jqlite遵循相同的约定。因此对
replaceWith
的调用将删除由
ng click
附加的事件处理程序。相反,使用
detach
append
保留事件处理程序,所有操作都按预期进行:

使用detach()

与replaceWith()等效


)()

您可以参考以下解决方案:

HTML:


上面的代码给出了相应的输出。请检查这段代码,如果您想要获得输出,请将其标记为有用。

Wow,我不知道您可以像这样重新编译现有的DOM元素(我以为它只适用于html字符串和模板文件)。谢谢哈哈哈,当我发布我自己的答案时,你计时:)没有想到jQuery解决方案-直接进入角度:)
  old.before( new ).detach()
<div ng-controller="Ctrl">
    <button ng-click="toggle()">Toggle</button>
    <div ng-show="showContent" id="toggleTarget">
        Some content = {{myContent}}
        <button ng-click="inc()">+</button>
    </div>
    <div id="placeholder" ng-show="showplaceholder">Placeholder</div>
</div>
function Ctrl($rootScope, $scope, $element) {
    $scope.myContent = 1;

    var target = angular.element(document.getElementById("toggleTarget"));
    var placeholder = angular.element(document.getElementById("placeholder"));

    var removed = false;
    $scope.showContent = true;
    $scope.placeholder = false;

    $scope.toggle = function(){
        $scope.myContent += 1;

        if (removed) {
            $scope.showContent = true;
            $scope.placeholder = false;
            removed = false;
        }
        else {
            $scope.showContent = false;
            $scope.placeholder = true;
            removed = true;
        }    
    }

    $scope.inc = function(){
        $scope.myContent += 1;
    };
}

angular.module('app', []);