2016-12-30 1 views
0

Methode 1Unterschied zwischen den folgenden zwei AngularJS-Konstrukten, falls vorhanden?

In HTML:

<my-directive> 
</my-directive> 

In Scripts:

function myDirective() { 
    var ddo = { 
     [LOTS OF OTHER VERY IMPORTANT DIRECTIVE PROPERTIES HERE] 
     controller: myController 
     bindToController: true 
    }; 
    return ddo; 
} 

Methode 2

In HTML:

<my-directive ng-controller="myController"> 
</my-directive> 

In Scripts:

function myDirective() { 
    var ddo = { 
     [LOTS OF VERY IMPORTANT DIRECTIVE PROPERTIES HERE] 
    }; 
    return ddo; 
} 

In beiden Fällen gibt es eine Richtlinie mit einigen anderen Eigenschaften (Vorlage, etc.), aber ich bin gerade zu ändern, wo ich Controller setzen. Sind die beiden Methoden analog?

+0

Die beiden Antworten und meine Antworten waren plötzlich gelöscht ... naja trotzdem danke – user7339019

+0

was meinst du? –

+0

Zwei Antworten auf meine Post, beide im selben Geist, sagen, dass: – user7339019

Antwort

1

Nein, die erste Methode wird bevorzugt.

Der Unterschied besteht darin, wie Winkel behandelt Scopes.

Die zweite Methode macht die Direktive abhängig vom externen Bereich (erstellt von ng-controller="myController"), was gegen den Punkt der Erstellung der Direktive (Code-Isolation) ist.

Zweite Methode wird die gleiche Arbeit, wenn Sie Eltern Bereich zu verwenden (standardmäßig, wenn Sie nicht scope Eigenschaft in Richtlinie DDO-Set - Ref: What is default Angular directive scope)

Zweite Methode funktioniert nicht, wenn Sie den Gültigkeitsbereich der Richtlinie getrennt haben , wie diese erstellt:

scope: { 
    param1: "=" 
} 

wie Sie nicht in der Lage Zugriffseigenschaften von myController sein werden.


bearbeiten:

Richtlinien Regeln könnte kompliziert werden, um alle Fälle zu verstehen, betrachten .component() verwenden, da es viel einfacher ist und folgt Best Practices - Introduction to Angular's components.


Weiterführende Literatur:

+0

Danke, genau das, was ich brauchte! – user7339019

+0

Eine weitere Folge, bedeutet dies, dass es einen Unterschied zwischen dem Erstellen einer Direktive mit * no * scope-Attribut im Vergleich zu dem Erstellen mit dem Scope-Attribut, das auf ein leeres Objekt gesetzt ist, gibt? – user7339019

+0

@ user7339019 - ja, 'Scope' Parameter tookt zwei Werte, wahr/falsch oder Objekt. Wenn ein Objekt vorhanden ist (sogar leer), ist der Bereich isoliert, und Sie können nicht auf Eigenschaften von übergeordneten Bereichen zugreifen. Wenn 'scope' in DDO auf" false "gesetzt oder einfach übersprungen wird, erstellt die Anweisung keinen neuen Bereich. –

Verwandte Themen