2017-01-06 31 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」);});如果您點擊具有「按鈕」類的元素,總會有警報。但事件偵聽者本身就是身體。 –