2017-01-06 32 views
2

我试着去克隆一个div标签,它包含了NG-点击功能少的HTML元素,

但动态克隆并附加不点火NG-点击功能HTML元素,

谁能帮我出

这是我用

angular.module('AddNewCab', []) 

    .controller('cabcontainer', ['$scope','$compile', function($scope,$compile) { 

    $scope.count = 0; 
    $scope.myFunc = function($compile) { 
     $scope.count=$scope.count+1; 
     var source = angular.element(document.querySelector('#cabdata')); 
     var container = angular.element(document.querySelector('#cabcontainer')); 
     var uniqueid='cabdata'+$scope.count; 
     var temp=$compile(source.clone().attr('id',uniqueid),$scope); 
     container.append(temp); 
    }; 
    }]); 
+0

如果您正在定义控制器或任何其他类型的模块,则不需要在应用程序模块中注入'[]'。删除它:'angular.module('AddNewCab')。controller ...'。 – AndreaM16

回答

2

我不知道你的HTML文件是什么,但我创建了一个这样的例子。

采取偷看:https://plnkr.co/edit/ZQ7EYw5CB3DojCKs7Qlv

HTML:

<div ng-controller="cabcontainer"> 
    <div id="cabdata"> 
    <p>Test1</p> 
    <p>Test2</p> 
    </div> 
    <div id="cabcontainer"> 
    <p>Clone here</p> 
    </div> 
    <input type="button" ng-click="myFunc()" value="Clone"/> 
</div> 

JS:

angular.module('AddNewCab', []) 

    .controller('cabcontainer', ['$scope','$compile', function($scope, $compile) { 

    $scope.count = 0; 
    $scope.myFunc = function() { 

     $scope.count=$scope.count+1; 
     var source = angular.element(document.querySelector('#cabdata')); 
     var container = angular.element(document.querySelector('#cabcontainer')); 

     var uniqueid='cabdata'+$scope.count; 
     var temp= $compile(source.clone().attr('id',uniqueid))($scope); 
     container.append(temp); 
    }; 
    }]); 

注:我做你的控制器的一些变化,例如,没有必要把$编译在你的函数中,因为它已经通过角度注入了控制器。

+0

感谢乔尔,即时尝试类似的功能,但这个克隆按钮必须复制每个克隆, – ravi

+0

Np @ravi,让我明白,是否也想克隆按钮? – Joel

+0

是Joel,请 – ravi

0

如果我明白你的权利,你要添加事件监听到动态创建的代码元素?在这种情况下,我会使用jQuery而不是ng-click。有点像

$("parentElement").on("click", "elementToClick", function() { 
    //your code here 
}); 

你可以做一个角度指令,但jQuery更容易解释。 如果你需要的参数,你可以用数据属性将它们添加到该元素与

this.getAttribute("data-AttributeName") 

哦打电话给他们,如果你使用毫微克的属性,让它们成为数据NG-*(如数据-ng点击)。将不会带来任何功能,但使您的代码html有效。

+0

感谢Stefan,其实我试图克隆div标签并追加到另一个div,container.append(source.clone()。attr('id',uniqueid));此源包含一个ng-click函数(类似于添加新行图标)。新创建的行ng-click不会触发,事件列表器也不会从新创建的代码中触发, – ravi

+0

不建议人们使用不同的框架,因为它“更容易解释”... – Claies

+0

在这种情况下,我的答案是非常正确的敢于说。或许我应该多解释一下: $(“parentElement”)。on(“click”,“elementToClick”,function(){}); parentElement是eventlistener绑定的元素。总是使用一个元素。如果没有其他人,只需使用身体。 “elementToClick”是eventlistener响应的元素。 (“click”,“.button”,function(){alert(“Hello world”);});如果您点击具有“按钮”类的元素,总会有警报。但事件侦听者本身就是身体。 –