Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 在循环中动态分配事件侦听器时的角度$q.all_Javascript_Angularjs_Q - Fatal编程技术网

Javascript 在循环中动态分配事件侦听器时的角度$q.all

Javascript 在循环中动态分配事件侦听器时的角度$q.all,javascript,angularjs,q,Javascript,Angularjs,Q,我发现这个细节和循环中异步操作的问题是一样的,但是$q语法仍然有问题 基本上,我有: controller: ["fooService", function(fooService) { var vm = this; vm.events = [ { iconClass: { on: "icon-is-active", off: "icon-is-not-active" }, event: "click",

我发现这个细节和循环中异步操作的问题是一样的,但是$q语法仍然有问题

基本上,我有:

controller: ["fooService", function(fooService) {
    var vm = this;
    vm.events = [
        {
            iconClass: { on: "icon-is-active", off: "icon-is-not-active" },
            event: "click",
            fn: function(self) { self.isActive = !self.isActive; },
            isActive: fooService.foobar //initialized to true elsewhere
        },
        {
            iconClass: { on: "icon-is-active", off: "icon-is-not-active" },
            event: "mouseup",
            fn: function(self) { self.isActive = !self.isActive; },
            isActive: fooService.barfoo //initialized to false elsewhere
        }
    ];
}];
需要这样做

link: function(scope, elem, attrs, ctrl) {
    for (var i = 0; i < ctrl.events.length - 1; i++) {
        elem[0].on(ctrl.events[i], function() {
            scope.$apply(function() {
                ctrl.events[i].fn(ctrl.events[i]); 
            });
        });
    } 
}

(那里什么也没有发生)

最后一行没有回调,当承诺解析了(var i=0;i时,运行您想要运行的任何代码都需要回调??它不应该是(var i=0;i吗。似乎您跳过了最后一项。
<my-button ng-repeat="event in vm.events">
    <i ng-class="event.isActive ? event.iconClass.on : event.iconClass.off"></i>
</my-button>
link: function(scope, elem, attrs, ctrl) {
    for (var i = 0; i < ctrl.events.length - 1; i++) {

        (function($event) {
            elem[0].on(ctrl.events[i], function() {
                scope.$apply(function() {
                    ctrl.events[i].fn(ctrl.events[i]); 
                });
            });
        })(event);

    } 
}
var promises = [];

for (var i = 0; i < ctrl.events.length - 1; i++) {
    promises.push(function() {
        return elem[0].on(ctrl.events[i].event, function() {
            scope.$apply(function() {
                ctrl.events[i].fn(ctrl.events[i]);
            });
        });
    });
}

$q.all(promises);