4

キーが押されたときにボタンのクリックをトリガーしようとしています。関数を使用してこれを行っていtriggerHandlerますが、これが上記のエラーの原因です。ある種の循環参照/ループを作成したに違いないと思っていますが、どこにあるのかわかりません。

これは私のHTMLです:

<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トリガーされるまでのロジックに主に関心があります。エラーはcurrentButton.triggerHandler("click")回線上で発生します。

誰かが私がしたことを見ることができますか? ありがとう。

4

1 に答える 1

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

于 2015-10-15T13:49:40.070 に答える