534 votes

Directive: lien vs compilation vs contrôleur

lorsque vous créez une directive, vous pouvez mettre le code dans le compilateur, la fonction de lien ou de la commande. Dans les docs, ils expliquent que:

  • compiler et lier de fonction sont utilisés dans les différentes phases de l'angle de cycle
  • les contrôleurs sont partagés entre les directives.

Cependant, pour moi, il n'est pas clair, le type de code doit aller où. E. g.: Je peux créer des fonctions dans les compiler et de les avoir attachés à la portée de lien. Ou je n'attacher les fonctions de la portée dans le contrôleur? Comment sont les contrôleurs partagé entre les directives, si chaque directive peut avoir son propre contrôleur? Sont vraiment les contrôleurs de la commune ou est-ce juste les propriétés de portée?

Merci schacki

474voto

ganaraj Points 14228

Compiler :

C'est la phase où Angulaire en fait la compilation de vos directive. Cette compilation fonction n'est appelée qu'une seule fois pour chacune des références à la directive donnée. Par exemple, dire que vous êtes à l'aide de la ng-repeat directive. ng-repeat aura pour rechercher l'élément, il est attaché, extrait le fragment html qu'il est attaché à et de créer une fonction de modèle.

Si vous avez utilisé le Guidon, le trait de soulignement de modèles ou de l'équivalent, c'est comme la compilation de leurs modèles à extraire une fonction de modèle. Pour ce modèle de la fonction de vous transmettre les données et la valeur de retour de cette fonction est le html avec les données dans les bons endroits.

La phase de compilation, c'est que l'étape Angulaire qui renvoie la fonction de modèle. Ce modèle de la fonction angulaire est appelée la fonction de liaison.

La liaison de la phase :

Le lien entre la phase est l'endroit où vous fixez les données de dollars (champ d'application ) à la fonction de liaison et il devrait vous retourner le lié html. Depuis la directive précise également où la version html de ce qui se passe ou ce que cela change, c'est déjà bon pour aller. C'est la fonction de l'endroit où vous souhaitez effectuer des modifications liées html, j'.e le code html qui dispose déjà de données attaché à elle. Dans angulaire si vous écrivez du code dans la fonction de liaison de sa généralement l'après-fonction de lien (par défaut). Il est une sorte de callback qui est appelée après la fonction de liaison a lié les données avec le modèle.

Contrôleur :

Le contrôleur est un endroit où vous mettez dans certains directive logique spécifique. Cette logique peut aller dans la fonction de liaison en tant que bien, mais alors vous devez mettre cette logique sur la portée pour en faire un "partageable". Le problème avec cela est que vous serait alors de corrompre le champ d'application avec vos directives des trucs qui n'est pas vraiment quelque chose qui est attendue. Alors, quelle est l'alternative si deux Directives envie de parler les uns aux autres / coopérer les uns avec les autres? Bien sûr, vous pouvez mettre tout ce que la logique dans un service, puis faire de ces deux directives dépendent de ce service, mais cela apporte un plus à la dépendance. L'alternative est de fournir un Contrôleur pour cette portée ( généralement isoler portée ? ) et puis ce contrôleur est injecté dans une autre directive que lorsque la directive "exige" que l'autre. Voir les onglets et les sous-fenêtres sur la première page de angularjs.org pour un exemple.

100voto

ndynan Points 107

Je voulais ajouter aussi que l'O'Reily Angular JS livre par l'Équipe de Google a à dire:

Contrôleur - Créer un contrôleur qui publie une API pour communiquer au-delà des directives. C'est un bon exemple -> http://www.thinkster.io/pick/51d27f261e4b9c3c98000001/angularjs-directives-to-directive-communication

Lien de modifier par programmation résultant de l'élément DOM cas, ajouter des écouteurs d'événement, et de configurer la liaison de données.

Compilation modifier par programmation les DOM modèle pour les fonctionnalités à travers des copies d'une directive, lorsque utilisé en ng-repeat. Votre compiler fonction permet également de lien de retour des fonctions pour modifier l'élément obtenu des instances.

14voto

ScaryBunny Points 75

En outre, une bonne raison d'utiliser un contrôleur par rapport à une fonction de liaison (puisqu'ils ont tous les deux accès à scope, element et attrs) est que vous pouvez transmettre n'importe quel service ou dépendance disponible dans un contrôleur (et dans n'importe quel ordre), vous ne pouvez pas faire cela avec la fonction de lien. Notez les différentes signatures:

 controller: function($scope, $exceptionHandler, $attr, $element, $parse, $myOtherService, someCrazyDependency) {...
 

contre.

 link: function(scope, element, attrs) {... //no services allowed
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X