Использование angular $scope и ng-model для корректировки чисел

Я работаю над метрономом, и изначально у меня был настроен div со значением 100:

<div ng-bind="currentBpm"></div>

В моем контроллере у меня изначально была установлена ​​​​область:

$scope.currentBpm = 100;

Затем у меня также есть функция, которая регулирует темп:

function adjustBpm(direction) {
    if (direction == false && $scope.currentBpm > 1) {
        $scope.currentBpm = $scope.currentBpm -1;
    } else if (direction == true && $scope.currentBpm < 999) {
        $scope.currentBpm = $scope.currentBpm +1;
    }

    console.log($scope.currentBpm);
}

Это сработало хорошо, но мне нужно дать пользователю возможность вводить значение с помощью цифровой клавиатуры.

Переключение div на числовой ввод:

<input type="number" ng-model="currentBpm">

Позволяет пользователю щелкнуть ввод и настроить значение, но при этом $scope не используется. Функция настройки значения по-прежнему записывает в консоль предыдущее значение, а не введенное. Я предполагаю, что ng-model уходит из области видимости и создает 2 разных значения.

Есть ли способ синхронизировать их?

Функция AdjustBpm вызывается нажатием кнопки +/-.

<div ng-click="adjustBpm(false)"> + </div>

person Lovelock    schedule 06.03.2017    source источник
comment
Как и куда вы звоните adjustBpm?Создайте для него плункер   -  person RIYAJ KHAN    schedule 06.03.2017
comment
@RIYAJKHAN только что обновил вопрос, и я посмотрю, что я могу сделать.   -  person Lovelock    schedule 06.03.2017
comment
@Lovelock Просто чтобы убедиться. работает ли приведенный выше код, если вы используете «кнопку» вместо «div»?   -  person Sagar    schedule 06.03.2017
comment
Возможный дубликат Каковы нюансы прототипа области видимости / прототип наследования в AngularJS?. Следуйте правилу всегда добавлять точку (.) к ng-models.   -  person georgeawg    schedule 06.03.2017


Ответы (1)


Вы должны вызвать ng-click и ng-keyup на входе:

<input type="number" ng-model="currentBpm" ng-click="adjustBpm(false)" ng-keyup="adjustBpm(false)">

Или, как сказал @georgeawg, вы можете использовать ng-change :

<input type="number" ng-model="currentBpm" ng-change="adjustBpm(false)">
person Damien    schedule 06.03.2017
comment
Более подходящей будет директива ng-change. - person georgeawg; 06.03.2017