由于某些原因,在动态元素上使用此函数(‘testclickfn’)作为ng-click时,它不会调用该函数。下面是angularjs文件:
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页面:
<div id="testdiv" ng-controller="testctrl">
<button ng-click="showelements()">Show dynamic elements</button><br>
</div>
我假设因为'click me‘标签是在angular加载页面后生成的,所以在页面生成后它不知道任何东西,所以ng-click="testclickfn()“不会注册到angularjs。
我该如何避免这种情况?
发布于 2018-08-21 08:00:30
你正在以一种angular不知道的方式创建元素(相当糟糕的做法),但是不用担心,你可以让angular知道!
将控制器签名更改为
controller('testctrl', function($scope, $compile) {
然后手动运行编译新元素以激活ng-click
指令
$scope.showelements = function(){
displayTestRows();
$compile($("#testdiv").contents())($scope);
}
如果您不知道,那么在控制器中使用jquery选择器是不好的,您应该使用一个指令和link
函数将元素附加到作用域(即,如果您有多个testctrl元素怎么办?),但这会让您运行起来
https://stackoverflow.com/questions/51939822
复制相似问题