Я хотел бы использовать ngPattern в пользовательской директиве ввода. Чтобы поиграть, я сначала создал следующую директиву:
myApp.directive('myInput', [function() {
return{
restrict: 'A',
replace: true,
require: 'ngModel',
scope: true,
template:
'<div>' +
' <input type="text" ng-model="val" ng-change="updateValue()" ng-pattern="/^-?(?:\d+|\d*\.(\d+)?)$/i">' +
'</div>',
link: function(scope, element, attrs, ngModelCtrl){
scope.updateValue = function(){
ngModelCtrl.$setViewValue(scope.val);
}
ngModelCtrl.$render = function () {
scope.val = ngModelCtrl.$viewValue;
};
}
};
}]);
Я вижу в отладчике, что значение scope.val
всегда не определено, поэтому вызов $setValue
не имеет никакого эффекта. Я попытался удалить атрибут ng-pattern, но и тогда обновление не работает.
Что здесь не так? Планкр можно найти здесь, где я привязываюсь к модели, а не к примитив!
Обновить
Кажется, что вызов ngModelCtrl.$setViewValue(scope.val)
в scope.updateValue
имеет странный результат. Если есть такая модель:
scope.model = {
'testValue' : 12
};
И я привязываюсь к "model.testValue"
(как в plunkr), тогда модель становится пустым объектом {}
после исполнения ngModelCtrl.$setViewValue(scope.val)
. Повторная установка значения в обычном поле ввода приведет к сбросу переменной scope.model
до нормального объекта. Для меня это не имеет смысла. Любая идея, почему это происходит?