triggerHandler导致错误:[$ rootScope:inprog] $ apply已在进行中错误 - AngularJS

时间:2015-10-15 12:58:35

标签: angularjs onclick jquery-triggerhandler

按下按键时,我试图触发按钮的单击。我正在使用 <!-- end of Add html--> 函数执行此操作,但这会导致上述错误。我想我必须创建某种循环引用/循环,但我看不到在哪里。

这是我的HTML:

triggerHandler

这是我的控制器:

<button id="demoBtn1" hot-key-button hot-key="hotKeys.primaryTest" class="po-btn primary-btn" type="submit" ng-click="btnFunction()"></button>

我的指示在这里:

.controller('BtnCtrl', function ($scope) {
    $scope.checkKeyPress = function ($event, hotKeyObj) {
        for(var key in hotKeyObj) {
            if($event.keyCode == hotKeyObj[key].keyCode) {
                var id = hotKeyObj[key].btnId;
                hotKeyObj[key].funcTriggered(id);
            }
        }
    }
    $scope.clickFunction = function(id) {
        var currentButton = angular.element(document.getElementById(id));
        currentButton.triggerHandler("click");
    }
    $scope.btnFunction = function() {
        console.log("clickFunction1 has been triggered");
    }

    $scope.hotKeys = {
        'primaryTest': {
            keyCode: 49,
            keyShortcut: "1",
            label: "Button",
            btnId: 'demoBtn1',
            funcTriggered: $scope.clickFunction
        },
        // more objects here
        }
    }
})

这是一项正在进行中的工作,所以我怀疑地方可能存在小错误,但我主要感兴趣的是从按键到.directive("hotKeyButton", function() { return { controller: 'BtnCtrl', scope: { hotKey: '=' }, transclude: true, template: "<div class='key-shortcut'>{{hotKey.keyShortcut}}</div><div class='hotkey-label'>{{hotKey.label}}</div>" }; }) 被触发的逻辑。错误会在btnFunction行上触发。

谁能看到我做过的事情?感谢。

1 个答案:

答案 0 :(得分:14)

由于您在使用$apply时遇到问题 - 您可以将triggerHandler电话打包到$timeout包装中 - 只是为了在另一个$digest中制作您需要的所有内容 - 循环,像这样:

$scope.clickFunction = function(id) {
    var currentButton = angular.element(document.getElementById(id));
    $timeout(function () {
      currentButton.triggerHandler("click");
    });
}

在此之后一切正常。

  • 另请注意$inject $timeout服务BtnCtrl
  • 此外,我不确定您是否需要为您的指令定义controller属性,但这不是主要案例。

演示:http://plnkr.co/edit/vO8MKAQ4397uqqcAFN1D?p=preview