391 votes

Différence entre le ' contrôleur de ', ' lien ' et ' compiler ' fonctionne lorsque vous définissez une directive

Certains endroits semblent utiliser la fonction de contrôleur pour la logique de la directive et d’autre utiliser la liaison. L’exemple d’onglets sur la page d’accueil angulaire utilise le contrôleur pour un et un lien pour autre directive. Quelle est la différence entre les deux ?

633voto

Mark Rajcok Points 85912

Je vais développer votre question un peu et comprennent également la compilation de la fonction.

  • la compilation de la fonction - usage pour le modèle de manipulation du DOM (c'est à dire, la manipulation des tElement = élément du modèle), d'où les manipulations qui s'appliquent à tous les DOM clones du modèle associé à la directive. (Si vous avez aussi besoin d'une fonction de lien (ou pré-et post-fonctions de liaison), et que vous avez défini pour la compilation de la fonction, la compilation de la fonction doit retourner la fonction de lien(s) parce que l' 'link' attribut est ignoré si l' 'compile' attribut n'est pas défini.)

  • fonction link - normalement utiliser pour l'enregistrement des DOM auditeurs (c'est à dire, $watch expressions sur le champ d'application) ainsi que la mise à jour du DOM (c'est à dire, la manipulation de iElement = instance de chaque élément). Il est exécuté après le modèle a été cloné -- par exemple, à l'intérieur d'un <li ng-repeat...>, la fonction de lien est exécuté après l' <li> modèle (tElement) a été cloné dans une iElement) pour l' <li> élément. Un $watch permet une directive, d'être informés de la portée des modifications de la propriété (un champ est associé à chaque instance), ce qui permet à la directive de rendre une instance mise à jour de la valeur pour les DOM.

  • contrôleur de fonction doit être utilisée quand un autre directive doit interagir avec cette directive. E. g., sur le AngularJS page d'accueil, le volet de la directive doit s'ajouter à la portée maintenu par les onglets de la directive, ainsi que les onglets de la directive doit définir une méthode de contrôleur (pensez API) que le volet de la directive accès et/ou d'appel.

    Pour une explication plus approfondie des onglets et volet directives, et pourquoi les onglets de la directive crée une fonction sur son contrôleur à l'aide d' this (plutôt que sur l' $scope), veuillez voir ce vs $portée dans AngularJS contrôleurs.

En général, vous pouvez placer des méthodes, $watches, etc. dans le cadre de la directive du contrôleur ou de la fonction de lien. Le contrôleur exécute tout d'abord, qui, parfois, des questions (voir ce violon qui se connecte lorsque la touche ctrl et le lien de fonctions de fonctionner avec deux imbriqués les directives). Comme Josh mentionné dans un commentaire, vous voulez peut-être placer champ d'application les fonctions de manipulation à l'intérieur d'un contrôleur simplement pour des raisons de cohérence avec le reste du cadre.

56voto

Pixic Points 508

En tant que complément à la Marque de la réponse, la compilation de la fonction n'a pas accès à leur portée, mais la fonction de lien.

Je recommande vraiment cette vidéo, la Rédaction de Directives par Misko Hevery (le père de AngularJS), où il décrit les différences et de certaines techniques. (Différence entre la compilation de la fonction et de la fonction de lien à 14:41 marque dans la vidéo).

35voto

Rahul Points 77
  1. code en cours d'exécution avant la Compilation : l'utilisation du contrôleur de
  2. code en cours d'exécution après la Compilation : utiliser Link

Angulaire de la convention : écrire la logique métier de contrôleur et de manipulation du DOM en lien.

En dehors de cela, vous pouvez appeler une fonction de contrôleur de fonction de lien d'une autre directive.Par exemple vous avez 3 des directives sur mesure

<animal>
<panther>
<leopard></leopard>
</panther> 
</animal>

vous souhaitez accéder à des animaux à partir de l'intérieur de "léopard" de la directive.

http://egghead.io/lessons/angularjs-directive-communication sera utile de savoir sur la directive de la communication

-6voto

ayortanli Points 28

Un ajout sur le contrôleur :

La signature de contoller est (àpartir de la documentation) :

Le dernier d'entre eux est, selon moi, important. Puisque vous pouvez injecter varibales comme $location, $anchorScroll, etc., de la directive en utilisant le contrôleur. Que je sache, ils ne sont pas disponibles avec la fonction link.

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