Привязка двух входов к одной модели

Как показано в этом плункере, я хотел бы иметь ‹input type="number "/› ‹input type="range"/›, которые обновляют одну и ту же переменную $scope, а также друг друга.

Прямо сейчас, когда я обновляю один ввод, переменная $scope изменяется, но значение другой области пусто. Мне просто нужно связать один с data-ng-model и использовать data-ng-change на другом? Есть ли более чистое решение?


person Justin Dearing    schedule 17.07.2014    source источник


Ответы (2)


Вот пример, на который я буду ссылаться. Проблема в том, что диапазон — это строковое значение, а число — числовое значение.

Создайте экземпляр переменной в вашем контроллере и напишите функцию для обработки преобразования

$scope.data = 10;

$scope.setDataAsNumber = function() {
  $scope.data = parseInt($scope.data, 10);
}

Создайте все свои элементы, привязанные к $scope.data

<input type="text" ng-model="data" ng-change="setDataAsNumber()">
<br>
<input type="number" ng-model="data">
<br>
<input type="range" ng-model="data" ng-change="setDataAsNumber()">
<br>
{{ data }}

Я решил это с помощью директивы ng-change.

person user2882597    schedule 17.07.2014

Не уверен, почему это так, но когда вы меняете type="number" на type="text", это работает.

Я нашел этот обходной путь для input type="number", но кажется немного хакерским:

$scope.$watch('MyNumber',function(number) {
  $scope.MyNumber = Number(number);
});
person Rob    schedule 17.07.2014
comment
Похоже на баг Angular. Думаю, мне не нужны блесны, так как у меня есть диапазон. - person Justin Dearing; 17.07.2014
comment
Да, я думал о том же. Это должно работать без описанного выше обходного пути $watch. Интересная находка. - person Rob; 17.07.2014
comment
я думаю, что это проблема с самим типом = число, поскольку он ожидает число, но когда мы используем тип диапазона, он возвращает строку. И почему тип диапазона отлично работает с текстовым полем - person Akhlesh; 17.07.2014
comment
Диапазон возвращает текст, а число возвращает числа? Это не имеет смысла, может ли диапазон когда-либо представлять не числа? - person Justin Dearing; 17.07.2014
comment
Не уверен, почему это может быть что-то кроме числа. Нашел это: html5doctor.com/the-output-element/#valueAsNumber - person Rob; 17.07.2014
comment
@JustinDearing, когда вы меняете значение в inputtext(number), оно показывает тип значения как число, а когда вы используете диапазон, он показывает тип как строку. см. это plnkr.co/edit/W5VhTe6afrsVdx9lxlOL?p=preview - person Akhlesh; 17.07.2014
comment
@Akhlesh Я понимаю, что происходит, я просто нахожу поведение неинтуитивным. - person Justin Dearing; 17.07.2014
comment
@ Джастин, да, я думаю, слишком хорошо, чтобы быть правдой. До тех пор, я думаю, будет javascript. - person Rob; 17.07.2014