изменить значение атрибута внутри директивы

я пытаюсь сделать ввод, который действует как кредитная карта, мой 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 или еще. Кажется, это работает только в начале функции ссылки, и если я вызываю ее внутри функции, она больше не работает.

Я надеюсь, что смогу получить помощь в этом, спасибо заранее, Даниэль!


person Pacuraru Daniel    schedule 19.06.2014    source источник


Ответы (1)


В функциях компиляции/связывания вы можете использовать attrs.$set :

...
link: function(scope, element, attrs){
    attrs.$set('uiMask', '** ** *');
}
person gorpacrate    schedule 20.06.2014