Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
Angularjs $compile未在角度控制器中定义_Angularjs - Fatal编程技术网

Angularjs $compile未在角度控制器中定义

Angularjs $compile未在角度控制器中定义,angularjs,Angularjs,我试图克隆一个div标签,它包含很少的HTML元素,带有ng click功能 但动态克隆和附加的HTML元素不触发ng click函数 有人能帮我吗 这是我使用的代码 angular.module('AddNewCab', []) .controller('cabcontainer', ['$scope','$compile', function($scope,$compile) { $scope.count = 0; $scope.myFunc = function($

我试图克隆一个div标签,它包含很少的HTML元素,带有ng click功能

但动态克隆和附加的HTML元素不触发ng click函数

有人能帮我吗

这是我使用的代码

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);
    };
  }]);

如果我理解的没错,您想向动态创建的元素添加eventlistener吗?在这种情况下,我将使用jQuery而不是ng click。差不多

$("parentElement").on("click", "elementToClick", function() {
   //your code here
});
对于angular指令也可以这样做,但是jQuery更容易解释。 如果需要参数,可以使用数据属性将它们添加到元素中,并使用

this.getAttribute("data-AttributeName")

哦,如果您使用ng属性,请将它们设置为data ng-*(例如data ng单击)。将不会给功能带来任何机会,但会使您的代码html有效。

我不知道您的html文件如何,但我创建了一个示例

看一看:

HTML:


注意:我在您的控制器中做了一些更改,例如,没有必要在您的函数中放入$compile,因为angular已经将它注入控制器。

谢谢Stefan,实际上我正在尝试克隆一个div标记并附加到另一个div container.append(source.clone().attr('id',uniqueid));此源包含一个ng click函数(类似于添加新行图标)。新创建的行ng click没有触发,事件列表也没有从新创建的代码触发,不要建议人们使用不同的框架,因为它“更容易解释”…在这种情况下,我敢说我的答案是正确的。也许我应该再解释一下:$(“parentElement”)。在(“click”,“elementToClick”,function(){})上;parentElement是eventlistener绑定到的元素。使用始终存在的元素。如果没有其他人,就用尸体。“elementToClick”是eventlistener响应的元素。所以,如果我在(“单击”,“按钮”,function(){alert(“Hello world”);})上写$(“body”);如果使用类“button”单击某个元素,则始终会出现警报。但是eventlistener本身是在body上的。@Claies大多数人不知道angular是基于jquery构建的。如果在不使用jquery的情况下使用angular,angular.element是jquery轻型版本的别名。如果在angular之前在jquery中绑定,angular.element是jquery本身的别名。因此,这并不是一个完全不同的框架。使用jquery,您正在断开UI与模型的连接,在该函数中所做的任何事情都不会知道,也无法响应。仅仅因为angular在内部使用jQuery做一些事情并不意味着在事情不正常时使用jQuery而不是angular是一件好事。如果您正在定义控制器或任何其他类型的模块,您不需要在应用程序模块中插入
[]
。删除它:
angular.module('AddNewCab')。controller…
。谢谢Joel,我正在尝试一个类似的功能,但是这个克隆按钮必须在每个克隆上复制,Np@ravi,让我理解,你也要克隆按钮吗?是的Joel,非常感谢
<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>   
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);
    };
  }]);