2015-04-17 4 views
5

Derzeit schreiben Sie eine Direktive und müssen Leerzeichen als Zeichen an sie übergeben. wie:Deaktivieren der Winkelanpassung für das Direktivenattribut

<my-directive exclude-chars=" abc"/>

Stellt sich heraus, dass eine Winkel das führende Leerzeichen entfernt; aber ich will es erhalten. Jeder Weg, das zu tun?

EDIT: Ich bin das Bestehen der Richtlinie Parameter als String (@ verwendet wird, nicht als eine Variable, mit =)

+0

Sie zeigen es auf HTML-Ansicht? Kannst du deine Vorlage teilen, wo du exclude-chars verwendest? – squiroid

+0

Vielleicht wickle deine Buchstaben einfach mit Anführungszeichen, so dass es eine Zeichenfolge wäre? –

Antwort

8

ich eines tun würde:

  1. Wickeln Sie das Attribut in {{' und '}}:

    <my-directive exclude-chars="{{' abc'}}"></my-directive> 
    

    und Zugriff auf die Zeichenfolge abc, einschließlich dem Raum unter Verwendung von attrs.excludeChars in der Verknüpfungsfunktion des dire ctive

    link: function(scope, element, attrs) { 
        var excludeChars = attrs.excludeChars; 
    } 
    
  2. Wickeln Sie das Attribut in ' und ':

    <my-directive exclude-chars="' abc'"></my-directive> 
    

    und dann den Wert durch $eval passieren auf den String mit dem Raum zu erhalten:

    link: function(scope, element, attrs) { 
        var excludeChars = scope.$eval(attrs.excludeChars); 
    } 
    

Hinweis: Der direkte Zugriff auf das Attribut erfolgt über jQuery/jQlite attr Funktion ist überhaupt nicht leicht zu Angular unterstützen verschiedene Formate von Direktiven/Attribute über normalization, und zwingt die Benutzer zu der Richtlinie zu verwenden, die Sie über attr zugreifen.


BTW: Benutzerdefinierte HTML-Elemente sollten das schließende Tag explizit in der Vorlage haben. Wenn Sie das nicht tun, habe ich festgestellt, dass das DOM, das der Browser häufig verwendet, nicht ganz das ist, was erwartet wird

+0

Lösung 1 hat perfekt funktioniert. Ich dachte nicht daran, danke! RE BTW: Ich weiß, ich war zu faul, das End-Tag zu tippen. – ra00l

+0

'Umbrechen Sie das Attribut in {{' und '}}. Ich denke, ich brauche eine Pause, weil ich nicht an diese Lösung denke. Du sparst meine Nacht, danke! – C0ZEN

1

Eine der einfachsten Lösung ist es, jqlite attr Funktion wie den folgenden Code zu verwenden.

In Ihrem Anweisungscode.

link: function(scope, element, attrs){ 
    console.log('>'+element.attr("exclude-chars")); 
} 

Demo jsfiddle is here.

+0

das würde auch funktionieren, aber es ist nicht "der eckige Weg". Als eine lustige Tatsache, wenn Sie 'attrs.excludeChars' versuchen, würden Sie immer noch den Platz beraubt haben. – ra00l

Verwandte Themen