Javascript 如何在不使用onclick的情况下处理ng repeat中的事件
我目前正在构建一个chrome扩展。Chrome的策略是不允许内联JS事件处理程序,所以我正在寻找一种方法为我的ng repeat元素创建事件监听器 我尝试根据传递给ng repeat的数据集生成事件处理程序,因为我知道模板,所以我能够生成适当的ID,但我似乎无法获得正确的时间,因此事件侦听器只能在ng repeat完成DOM更新后设置 我目前的代码如下:Javascript 如何在不使用onclick的情况下处理ng repeat中的事件,javascript,angularjs,google-chrome-extension,addeventlistener,Javascript,Angularjs,Google Chrome Extension,Addeventlistener,我目前正在构建一个chrome扩展。Chrome的策略是不允许内联JS事件处理程序,所以我正在寻找一种方法为我的ng repeat元素创建事件监听器 我尝试根据传递给ng repeat的数据集生成事件处理程序,因为我知道模板,所以我能够生成适当的ID,但我似乎无法获得正确的时间,因此事件侦听器只能在ng repeat完成DOM更新后设置 我目前的代码如下: app.controller('commentsCtrl', function($scope) { $scope.data = da
app.controller('commentsCtrl', function($scope) {
$scope.data = datalayer;
//console.log($scope.data);
document.addEventListener('DOMContentLoaded', function(){
for (var i = 0; i < datalayer.comments.length; i++){
var id = datalayer.comments[i].id + "_replybutton";
console.log(id);
var div = document.getElementById(id);
console.log(div);
console.log(datalayer.sc);
}
});
});
app.controller('commentsCtrl',函数($scope){
$scope.data=数据层;
//log($scope.data);
document.addEventListener('DOMContentLoaded',function(){
对于(var i=0;i
x_replybutton是我要为其创建侦听器的按钮的id格式。目前,我可以在控制台中加载重复部分后使上述代码正常工作,但当我将其添加到控制器时,它不会运行
如果您有任何想法或建议,我们将不胜感激。您的
数据层变量来自哪里?你不应该使用
控制器或服务中的全局变量,但注入您需要的内容
当您将数据层
设置为赋值给$scope.data时,我猜它没有值,
但这是一个相当复杂的问题
这在某种程度上得到了解决,可能是由
在什么地方
如果是这样,(暂时忽略您应该在注入服务中产生价值)
你也许可以
app.controller('commentsCtrl', function($scope, $timeout) {
datalayer.then((datalayer) => {
$scope.data = datalayer;
$timeout(()=>{
for (var i = 0; i < datalayer.comments.length; i++){
var id = datalayer.comments[i].id + "_replybutton";
var div = document.getElementById(id);
div.addEventListener('click', function() {
console.log('clicked');
});
}
}, 0);
})
}
app.controller('commentsCtrl',函数($scope,$timeout){
数据层。然后((数据层)=>{
$scope.data=数据层;
$timeout(()=>{
对于(var i=0;i
$timeout(()=>{},0)
将使代码等待执行,直到完成
呈现DOM(实际上是让JavaScript在堆栈清除后执行代码)。显然,chrome安全策略允许使用ng click。非常感谢超时。数据层目前只是xhr请求的占位符,但我也会考虑到这一点。