gpt4 book ai didi

javascript - 编译后 ng-click 多次触发

转载 作者:行者123 更新时间:2023-11-29 21:41:57 24 4
gpt4 key购买 nike

我已经阅读了很多 SO 答案,但无法解决问题。

我有一个 Javascript function创建 HTML类似 document.createElement(...) 的元素

这是该函数的一部分:

var div=document.getElementById(params.wrapper);
div.setAttribute("ng-controller","ProjectController");

var button = document.createElement('button');
button.setAttribute('id','btn-view-users-' + params.id);
button.className='button-manage-user';
button.setAttribute('ng-click','hello()');
div.appendChild(button);

此函数在应用程序启动时调用并创建许多行,因此当加载页面时,函数生成的 HTML 如下所示:(此示例代码经过简化以更易于理解 )

<div id="wrapper" class="wrapper ng-scope" ng-controller="ProjectController">
<button id="btn-view-users-310" class="button-manage-user" ng-click="hello()">Manage Users</button>
<button id="btn-view-users-311" class="button-manage-user" ng-click="hello()">Manage Users</button>
<button id="btn-view-users-312" class="button-manage-user" ng-click="hello()">Manage Users</button>
<button id="btn-view-users-313" class="button-manage-user" ng-click="hello()">Manage Users</button>
</div>

Angular Controller :

app.controller('ProjectController',
['$scope', '$http',
function($scope, $http) {
$scope.hello = function(){
console.log("hello")
}
}
]
)

在创建所有元素后的函数末尾,我使用 :

进行编译
var content = $(".wrapper");
angular.element(document).injector().invoke(function($compile) {
var scope = angular.element(content).scope();
$compile(content)(scope);
console.log("#compile")//log appears in the console 10 times if 10 elements are created.
});

但是当我点击按钮时,“hello”被触发了很多次!

如果我在页面上有 10 个元素,然后点击 第一个 元素,它会触发 10 次,如果我点击 < strong>second 元素它被触发 9 次 等等..

我试图移动 ng-controller按钮内的声明 button.setAttribute("ng-controller","ProjectController");或者甚至在 <body>标记,但我仍然得到相同的行为。

谢谢你的帮助

最佳答案

这是因为你正在编译 controller div,它将编译 ng-controller="ProjectController"指令并将注册您的实例 ProjectController编译 div 的次数。

你应该做 $compile(content.contents())(scope);而不是编译整个 Controller 元素。

但是compile元素应该只有一个根元素,就像在你的情况下你不能那样做,因为你想要编译的元素应该有一个根元素。其他应该是该根的子元素。

关于javascript - 编译后 ng-click 多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32483826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com