Бих искал да използвам 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, но и тогава актуализацията не работи.
какво не е наред тук Plunkr може да бъде намерен тук, където се свързвам с модел, а не с примитивен!
Актуализация
Изглежда, че извикването на ngModelCtrl.$setViewValue(scope.val)
в scope.updateValue
има странен резултат. Ако имате такъв модел:
scope.model = {
'testValue' : 12
};
И се свързвам с "model.testValue"
(както в plunkr), след което моделът става празен обект {}
след изпълнението на ngModelCtrl.$setViewValue(scope.val)
. Повторното задаване на стойността в нормално поле за въвеждане ще нулира променливата scope.model
до нормален обект. За мен това няма смисъл. Някаква идея защо се случва това?