454 Stimmen

Angular-Direktiven - wann und wie man compile, controller, pre-link und post-link verwendet

20voto

Izhaki Punkte 22440

Funktion des Controllers

Die controller-Funktion jeder Direktive wird jedes Mal aufgerufen, wenn ein neues zugehöriges Element instanziiert wird.

Offiziell ist die controller-Funktion der Ort, an dem:

  • Controller-Logik (Methoden) definiert wird, die zwischen Controllern gemeinsam genutzt werden können.
  • Bereichsvariablen initiiert werden.

Es ist erneut wichtig zu beachten, dass, wenn die Direktive einen isolierten Bereich betrifft, alle Eigenschaften darin, die vom übergeordneten Bereich erben, noch nicht verfügbar sind.

Mach es:

  • Definiere Controller-Logik
  • Initiiere Bereichsvariablen

Mache es nicht:

  • Prüfe Kinderelemente (sie sind möglicherweise noch nicht gerendert, an den Bereich gebunden, usw.).

19voto

Izhaki Punkte 22440

Post-Link-Funktion

Wenn die post-link-Funktion aufgerufen wird, haben alle vorherigen Schritte stattgefunden - Bindung, Transklusion, usw.

Dies ist typischerweise ein Ort, um das gerenderte DOM weiter zu manipulieren.

Machen Sie:

  • Manipulieren Sie DOM (gerenderte und daher instanziierte) Elemente.
  • Fügen Sie Ereignisbehandler hinzu.
  • Inspektieren Sie Kind-Elemente.
  • Richten Sie Beobachtungen auf Attribute ein.
  • Richten Sie Beobachtungen auf den Bereich ein.

16voto

Izhaki Punkte 22440

Vor-Link Funktion

Jedes pre-link Funktion der Direktive wird jedes Mal aufgerufen, wenn ein neues zugehöriges Element instanziiert wird.

Wie bereits im Abschnitt zur Kompilierungsreihenfolge zu sehen ist, werden pre-link Funktionen zuerst für das Elternelement und dann für das Kindelement aufgerufen, während post-link Funktionen umgekehrt für das Kind- und dann das Elternelement aufgerufen werden.

Die pre-link Funktion wird selten verwendet, kann aber in speziellen Szenarien nützlich sein; zum Beispiel, wenn ein Kind-Controller sich beim Eltern-Controller registriert, die Registrierung aber in einer Eltern-dann-Kind Art und Weise erfolgen muss (ngModelController macht dies so).

Nicht:

  • Kindelemente inspizieren (sie sind möglicherweise noch nicht gerendert, an den Scope gebunden usw.).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X