вызывать функцию контекста контроллера на keyPress из директивы AngularJS - PullRequest
0 голосов
/ 16 октября 2018

Ниже приведена функция области видимости моего контроллера:

MyApp.controller("MyController", function ($scope, MyService) {    
$scope.hposition = "";
$scope.selectedRow = 0;
$scope.pSearch = {};    

$scope.selectH = function (index, hId, myModel) {
    $scope.selectedRow = index;    
    var resultList = MyService.selectH(hId, $scope.hposition, myModel);
    resultList.then(function (response) {
        $scope.myModel= response.data;
        $("#divlookup").dialog('close');
    })
}   });

И у меня есть директива для событий клавиатуры - нажатия клавиш, нажатия клавиш и нажатия клавиш.

MyApp.directive('arrowSelector', ['$document', function ($document) {
return {
    restrict: 'A',
    link: function (scope, elem, attrs, ctrl) {
        $document.bind('keydown', function (e) {               
            //if (elemFocus) {
                if (e.keyCode == 38 || e.keyCode == 37) {
                    console.log(scope.selectedRow);
                    if (scope.selectedRow == 0) {
                        return;
                    }
                    scope.selectedRow--;
                    scope.$apply();
                    e.preventDefault();
                }
                if (e.keyCode == 40 || e.keyCode == 39) {
                    if (scope.selectedRow == scope.hlist.length - 1) {
                        return;
                    }
                    scope.selectedRow++;
                    scope.$apply();
                    e.preventDefault();
                }
                if (e.keyCode == 13) {                    

                    var resultList = scope.selectH(hId, $scope.hposition, myModel);
    resultList.then(function (response) {
        $scope.myModel= response.data;
        $("#divlookup").dialog('close');
    });
                    scope.$apply();
                    e.preventDefault();                        

                }

        });
    }
};}]);

Я попытался вызвать область действия функции.selectH (), но он не работает.Как я могу вызвать мою функцию selectH, когда e.keyCode == 13?Есть ли другой лучший способ сделать события стрелок вверх и вниз на клавиатуре?

1 Ответ

0 голосов
/ 16 октября 2018

Вам просто нужно добавить область действия в вашей директиве, например scope: { someCtrlFn: '&callbackFn' },, и добавить ее в html, где вы использовали эту директиву, например

<div ng-controller="MyCtrl">
<div my-directive callback-fn="ctrlFn(arg1)"></div>

Весь пример как здесь

Еще одна вещь заключается в том, что вы можете напрямую позвонить в свою службу из своей директивы и получить ответ от поставщика услуг.

MyApp.directive('arrowSelector', ['$document','MyService', function ($document) { return {
restrict: 'A',
link: function (scope, elem, attrs, ctrl) { $document.bind('keydown', function (e) {               
        //if (elemFocus) {
            if (e.keyCode == 38 || e.keyCode == 37) {
                console.log(scope.selectedRow); if (scope.selectedRow == 0) {
                    return;
                }
                scope.selectedRow--;
                scope.$apply();
                e.preventDefault();
            } if (e.keyCode == 40 || e.keyCode == 39) {
                if (scope.selectedRow == scope.hlist.length - 1) {
                    return;
                }
                scope.selectedRow++;
                scope.$apply();
                e.preventDefault();
            }
            if (e.keyCode == 13) {   var resultList = MyService.selectH(hId, $scope.hposition, myModel);
resultList.then(function (response) {
    $scope.myModel= response.data;
    $("#divlookup").dialog('close'); });
                scope.$apply();
                e.preventDefault();                        

            }

    });} };}]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...