Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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

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
Javascript 如何在不使用onclick的情况下处理ng repeat中的事件_Javascript_Angularjs_Google Chrome Extension_Addeventlistener - Fatal编程技术网

Javascript 如何在不使用onclick的情况下处理ng repeat中的事件

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

我目前正在构建一个chrome扩展。Chrome的策略是不允许内联JS事件处理程序,所以我正在寻找一种方法为我的ng repeat元素创建事件监听器

我尝试根据传递给ng repeat的数据集生成事件处理程序,因为我知道模板,所以我能够生成适当的ID,但我似乎无法获得正确的时间,因此事件侦听器只能在ng repeat完成DOM更新后设置

我目前的代码如下:

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请求的占位符,但我也会考虑到这一点。