2013-03-21 22 views

risposta

1

mi si avvicinò con una soluzione che sembra funzionare:

.directive('tag', ['$compile', function($compile) { 
    return { 
    priority: 1000, 
    terminal: true, 
    compile: function(telement, attrs) { 
     attrs.$set('tag', null); 
     attrs.$set('ngMaxlength', '10'); 
     attrs.$set('ngPattern', '/[\\w\\d]+/'); 

     var link = $compile(telement); 

     return function($scope, $element) { 
     link($scope, function(clonedElement) { 
     $element.replaceWith(clonedElement); 
     }); 
     } 
    } 
    } 
}]); 

La chiave è assicurandosi che la direttiva abbia una priorità più alta di tutte le altre direttive sull'elemento e che termini, così che altre dir ectives non compilati e collegati.

3

Non penso che sia necessario il $compile(), una funzione di collegamento o terminal. Angular compilerà automaticamente il telement per noi.

.directive('tag', [function() { 
    return { 
    priority: 1000, 
    compile: function(telement, attrs) { 
     attrs.$set('tag', null); 
     attrs.$set('ngMaxlength', '10'); 
     attrs.$set('ngPattern', '/[\\w\\d]+/'); 
    } 
    }; 
}]); 

testati con questo HTML:

<input ng-model="test" ng-init="test=2" tag> 
{{test}} 

Plunker.

+0

Grazie per aver segnalato attrs. $ Impostato su di me! Tuttavia, non sembra che usarlo per impostare i lavori di ng-model. Qualche idea, perché no? Una modifica del tuo plunker che mostra questo: http://plnkr.co/edit/ad2zIbNqW800KZi2Ulxn?p=preview – MrException

+0

@MrException, non so perché non funzioni. Ecco una domanda su questo problema: http://stackoverflow.com/questions/17405790/adding-ngmodel-to-input-with-a-directive –

+0

Super @Mark, mi stavo strappando i capelli cercando "attrs". $ set ('ng-pattern') 'e non capisco perché sembrava identico in html ma non stava accadendo nulla. Volevo notare che, nei miei rapidi test con Firefox corrente e Chrome e Angular 1.0.7 almeno, la 'priority: 1000' non sembra essere necessaria per il pattern ng-validation per funzionare. – Daryn

Problemi correlati