2013-03-21 4 views

Antwort

1

ich mit einer Lösung kam, die zu funktionieren scheint:

.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); 
     }); 
     } 
    } 
    } 
}]); 

Der Schlüssel ist, sicherzustellen, dass die Richtlinie eine höhere Priorität als alle anderen Richtlinien zu dem Element hat und beendet, so dass andere Dir ectives arent kompiliert und verknüpft.

3

Ich glaube nicht, $compile(), eine Link-Funktion oder terminal sind notwendig. Angular kompiliert automatisch die telement für uns.

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

mit diesem HTML Geprüft:

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

Plunker.

+0

Vielen Dank für den Hinweis auf Attr. $ Gesetzt zu mir! Es scheint jedoch nicht, dass die Verwendung von ng-Modell funktioniert. Irgendwelche Ideen warum nicht? Eine Modifikation Ihres Plunkers zeigt dies: http://plnkr.co/edit/ad2zIbNqW800KZi2Ulxn?p=preview – MrException

+0

@MrException, ich weiß nicht, warum es nicht funktioniert. Hier ist eine SO Frage zu diesem Thema: http://stackoverflow.com/questions/17405790/adding-ngmodel-to-input-with-a-directive –

+0

Super @Mark, hatte ich meine Haare gezogen versuchen 'attrs. $ set ('ng-pattern') 'und nicht verstehen, warum es in html identisch aussah, aber nichts passierte. Ich wollte anmerken, dass - in meinen Schnelltests mit aktuellem Firefox und Chrome und Angular 1.0.7 zumindest - die 'Priorität: 1000' nicht benötigt wird, damit die Pattern-ng-Validierung funktioniert. – Daryn

Verwandte Themen