首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >angularjs ng-click不适用于动态html元素

angularjs ng-click不适用于动态html元素
EN

Stack Overflow用户
提问于 2018-08-21 07:44:47
回答 1查看 2K关注 0票数 0

由于某些原因,在动态元素上使用此函数(‘testclickfn’)作为ng-click时,它不会调用该函数。下面是angularjs文件:

代码语言:javascript
复制
app.controller('testctrl',function($scope){
     testfn($scope);

     $scope.showelements = function(){
        displayTestRows();
     }
});

function testfn($scope){
   $scope.testclickfn = function(){
     alert('testing click fn');
   };
}

function displayTestRows(){
   for(var i=0; i < 5; i++){
      $("#testdiv").append('<p ng-click="testclickfn()">click me</p><br>'); 
   }
}

调用angularjs控制器‘testctrl’的HTML页面:

代码语言:javascript
复制
<div id="testdiv" ng-controller="testctrl">
   <button ng-click="showelements()">Show dynamic elements</button><br>
</div>

我假设因为'click me‘标签是在angular加载页面后生成的,所以在页面生成后它不知道任何东西,所以ng-click="testclickfn()“不会注册到angularjs。

我该如何避免这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 08:00:30

你正在以一种angular不知道的方式创建元素(相当糟糕的做法),但是不用担心,你可以让angular知道!

将控制器签名更改为

代码语言:javascript
复制
controller('testctrl', function($scope, $compile) {

然后手动运行编译新元素以激活ng-click指令

代码语言:javascript
复制
$scope.showelements = function(){
    displayTestRows();
    $compile($("#testdiv").contents())($scope);
}

如果您不知道,那么在控制器中使用jquery选择器是不好的,您应该使用一个指令和link函数将元素附加到作用域(即,如果您有多个testctrl元素怎么办?),但这会让您运行起来

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51939822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档