Я хотел бы использовать ngPattern в пользовательской директиве ввода. Для того, чтобы играть вокруг я создал следующую директиву в первом:настраиваемая директива ввода с использованием ngModel не обновляет значение модели
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, но также обновление не работает.
Что здесь не так? Plunkr можно найти here, где Я привязываюсь к модели, а не к примитиву!
Update
кажется, что вызов ngModelCtrl.$setViewValue(scope.val)
в scope.updateValue
имеет странный результат. Если есть модель, как это:
scope.model = {
'testValue' : 12
};
И я связываю с "model.testValue"
(как в plunkr), то модель становится пустой объект {}
после выполнения ngModelCtrl.$setViewValue(scope.val)
. Повторное включение значения в нормальном поле ввода приведет к сбросу переменной scope.model
в назначенный объект. Для меня это не имеет смысла. Любая идея, почему это происходит?
Как вы можете видеть в plunkr есть, поэтому я связываю модель не является примитивным «». – Sjoerd222888
Я думаю, что он ссылался на вашу ng-модель в строке шаблона, где вы не используете «.». –