Изменить ng-модель сфокусированного элемента - PullRequest
0 голосов
/ 27 июня 2018

Я делаю веб-приложение, используя angularJS 1.5. Пользователь будет взаимодействовать с веб-страницей, используя сканер штрих-кода, подключенный к сети. Само соединение осуществляется через веб-сокет, который возвращает мне сканированное значение.

Я бы хотел сделать следующее:

  • Проверьте, какое поле имеет фокус на экране
  • Установите значение этого поля для отсканированного штрих-кода
  • Запустить событие для поля

Это код, который у меня сейчас есть:

self.scannerSocket.onmessage = function (e) {
    // Get the scanned barcode from the event
    var obj = JSON.parse(e.data);
    var message = obj.Body.Values[0].Value;
    var value = message.replace(/ +(?= )/g,'');

    // Get the element which has focus on the screen
    var $focusedElement = $($document[0].activeElement);
    if(! $focusedElement || $focusedElement.is(":disabled")) return;

    // Set the new value of the element
    $focusedElement.val(value);

    // Trigger the enter event on the element
    $timeout(function(){
        var e = jQuery.Event("keypress");
        e.which = 13;
        e.keyCode = 13;
        $focusedElement.trigger(e);
    });
};

Проблема в том, что изменение значения элемента не приводит к изменению ng-модели за этим элементом. Я думал сделать что-то вроде этого:

var model = $focusedElement.attr("ng-model");
$scope[model] = value;

Однако проблема в том, что код веб-сокета находится в службе. Так что нет $scope. Плюс в моем приложении несколько изолированных компонентов. У каждого свой охват. Сканирование должно работать на всех полях ввода на экране.

Итак, вопрос: как я могу изменить значение ng-модели за элементом?

1 Ответ

0 голосов
/ 27 июня 2018

Мне удалось обновить модель, используя

        $focusedElement.trigger('input');
        $focusedElement.trigger('change');

Решение найдено здесь: Обновить угловую модель после установки входного значения с помощью jQuery

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