я пытаюсь сделать ввод, который действует как кредитная карта, мой html выглядит так
<input id="card-number" class="card-number" name="card-number" card-number ng-model="card.number" ui-mask="**** **** **** ****" />
и моя директива выглядит так
.directive('cardNumber', function($cardUtils) {
return {
restrict: 'A',
require: ['^card', 'ngModel'],
scope: {
model: '=ngModel'
},
link: function(scope, elem, attrs, ctrls) {
attrs.uiMask = "****";
var cardCtrl = ctrls[0],
ngModelCtrl = ctrls[1];
var watchModel = function() {
return ngModelCtrl.$viewValue;
}
scope.$watch(watchModel, function() {
var cardType = $cardUtils.getCardByNumber(ngModelCtrl.$viewValue);
if(cardType.classname == 'american-express')
attrs.uiMask = "**** ****** *****";
else
attrs.uiMask = "**** **** **** ****";
scope.$apply();
cardCtrl.updateCardClass(ngModelCtrl.$viewValue);
});
}
};
});
теперь проблема внутри директивы, строки
attrs.uiMask = "****";
на самом деле изменяет атрибут ui-mask из ввода, но когда я использую то же самое внутри этой функции $watch, атрибут не изменяется, даже если он входит в if или еще. Кажется, это работает только в начале функции ссылки, и если я вызываю ее внутри функции, она больше не работает.
Я надеюсь, что смогу получить помощь в этом, спасибо заранее, Даниэль!