AngularJS - принять ui.bootstrap modal с клавишей ENTER

Проблема:
Мне не удалось принять модальное окно с клавишей ENTER

Я изменил стандартный Plunker, чтобы показать вам, что я сделал с тех пор → Здесь

Что у меня:
Вкратце, клавиша ENTER распознается модальной, но она не вызывает мою функцию (проблемы с областью, я подозреваю).

Плохая часть заключается в том, что мне пришлось модифицировать template/modal/window, который я бы с удовольствием оставил неиспорченным, если это возможно.

Что бы я хотел
Мне бы очень хотелось просто поместить директиву ng-enter в мой модальный, не изменяя шаблон по умолчанию

Extra
Я также попытался добавить "событие 13" в директиву modal, но я не смог передать какой-либо результат в modal.close, поэтому я уронил эту дорогу

Любая мысль?

Ответ 1

Я обнаружил, что проще всего добавить обработчик события ввода в контроллер модального режима:

var text = "This is the text in the modal";
var modalPromise = $modal.open({
    template:
    '<div class="modal-body">' +
    '<button class="close" ng-click="$dismiss(\'×\')">×</button>'+
    '<h3 ng-bind="body"></h3>'+
    '</div>'+
    '<div class="modal-footer">'+
    '<button class="btn btn-primary" ng-click="$close(\'ok\')">OK</button>'+
    '<button class="btn btn-warning" ng-click="$dismiss(\'cancel\')">Cancel</button>'+
    '</div>',
    controller: function ($scope, $document) {
        $scope.body = text;

        var EVENT_TYPES = "keydown keypress"
        function eventHandler(event) {
            if (event.which === 13) {
                $scope.$close('ok');
            }
        }
        $document.bind(EVENT_TYPES, eventHandler);
        $scope.$on('$destroy', function () {
            $document.unbind(EVENT_TYPES, eventHandler);
        })
    }
}).result;

Ответ 2

Поддержка AngularJS по умолчанию.

Добавьте тег <form> в свой шаблон (modal.html) и добавьте директиву ng-submit например.

<form name="questionForm" ng-submit="ok()">
  <div class="modal-header">
    <h3 class="modal-title">{{title}}</h3>
  </div>
  // the rest of the code here
</form>

Ответ 3

Проверьте мой Plunker. Вы должны добавить ng-enter в кнопку "ОК".

<button class="btn btn-primary" ng-enter="ok();" ng-click="ok()">OK</button>

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