angular.js - directive里的link和controller区别?非directive的scope能否用link?
PHP中文网
PHP中文网 2017-05-15 16:51:39
0
2
684

为什么有的要写在link里面,有的要写在controller里面?!
如果希望在module中设置一个子scope,但不用directive,这时候能否用link?
(比如说用ngRoute时候的ng-view部分,可否用link)
controller可以和服务器端通信是吧,link好像不干这事情?还是只是我没见到过?

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(2)
小葫芦

À propos de la différence entre lien et contrôleur dans la directive ?
1. Ordre d'exécution : contrôleur d'abord, puis lien
2. Quand utiliser le contrôleur : dans les scénarios généraux, vous ne souhaitez pas utiliser le contrôleur, il vous suffit d'écrire la logique dans le lien ; le scénario dans lequel le contrôleur est utilisé est que l'instruction (supposée être a) sera requise. par d'autres instructions (supposées être b) Quand, ce contrôleur sera passé dans la fonction de lien de l'instruction b (s'il y a plusieurs require, un tableau sera passé, et le contrôleur correspondant à chaque instruction require sera stocké dans le tableau). Le but est évidemment la communication entre les instructions.

Puis-je utiliser un lien pour des portées non directives ?
Le lien est appelé uniquement dans l'instruction, ce qui signifie que le lien est appelé lorsque l'instruction est liée à la portée après la compilation.
Le lien n'est utilisé qu'à l'endroit où l'instruction est définie. Il peut également être utilisé à d'autres endroits. Par exemple, lors de la création d'une boîte contextuelle, vous devez obtenir le modèle tpl, puis appeler var linkFn = $compile(angular.element(tpl));. le temps, une fonction de lien est renvoyée, puis linkFn(scope), la portée ici est la portée que vous devez spécifier, elle peut être nouvellement créée ou existante.

某草草

Lien et contrôleur sont des concepts totalement indépendants.

Pour une directive spécifique, il peut n'y avoir pas de contrôleur. Le lien est plus compliqué et peut essentiellement être considéré comme un rappel de $compile. Angularjs doit d'abord compiler pour une directive ---> object-- -> Appeler le lien pour se lier à la portée correspondante ---> Déclencher $digest (il y a plusieurs étapes après cela pour mettre à jour une directive. Le nombre et le moment de la compilation des différents objets sont différents, veuillez consulter l'API pour plus de détails)

En bref, la compilation, les liens et autres sont tous directionnels. Si le sujet est familier avec jquery, alors le processus de compilation équivaut à la création d'objets dom ($('<a class = //... . ') ) le lien est une opération DOM telle que $().append ou prepend.

Alors, quelle est la portée ? La portée est utilisée pour lier des modèles.
Qu'est-ce qu'un contrôleur ? Utilisé pour ajouter des méthodes (logique) à la portée.

Link est un mécanisme d'aspect fourni par AngularJS pour intégrer des directives dans le DOM. Le contrôleur est le contexte dans lequel l'événement de surveillance dans la portée est déclenché, ce qui est complètement différent.

Quant à la dernière question, tant que la fonction peut être exécutée, le code que vous écrivez peut être exécuté, mais de manière générale
1) Écrivez votre logique métier dans le contrôleur, et non dans le propre contrôleur de la directive, mais dans le contrôleur de la portée à laquelle elle est liée

2) N'ayez pas d'opérations DOM dans le contrôleur, en particulier le pré-ajout et l'ajout, car les objets DOM non compilés ne peuvent pas être surveillés et Angularjs ne surveillera pas les objets DOM qui sont ajoutés ultérieurement et n'ont pas été compilés.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal