La controller
fonction / objet représente un contrôleur de vue de modèle d'abstraction (MVC). Bien qu'il n'y ait rien de nouveau à écrire sur MVC, c'est toujours le plus grand avantage d'angular: diviser les préoccupations en plus petits morceaux. Et voilà, rien de plus, donc si vous devez réagir sur les Model
changements à venir de View
l' Controller
est la bonne personne pour faire ce travail.
L'histoire de la link
fonction est différente, elle vient d'une perspective différente de celle de MVC. Et c'est vraiment essentiel, une fois qu'on veut franchir les frontières d'un controller/model/view
(modèle) .
Commençons par les paramètres passés dans la link
fonction:
function link(scope, element, attrs) {
- scope est un objet scope angulaire.
- L'élément est l'élément enveloppé dans jqLite auquel cette directive correspond.
- attrs est un objet avec les noms d'attributs normalisés et leurs valeurs correspondantes.
Pour mettre le link
dans le contexte, nous devons mentionner que toutes les directives passent par ces étapes du processus d'initialisation: Compiler , Lier . Un extrait de Brad Green et Shyam Seshadri livre Angular JS :
Phase de compilation (sœur du lien, mentionnons-la ici pour avoir une image claire):
Dans cette phase, Angular parcourt le DOM pour identifier toutes les directives enregistrées dans le modèle. Pour chaque directive, il transforme ensuite le DOM en fonction des règles de la directive (modèle, remplacer, transclure, etc.) et appelle la fonction de compilation si elle existe. Le résultat est une fonction de modèle compilée,
Phase de liaison :
Pour rendre la vue dynamique, Angular exécute ensuite une fonction de lien pour chaque directive. Les fonctions de liaison créent généralement des écouteurs sur le DOM ou le modèle. Ces auditeurs gardent la vue et le modèle synchronisés à tout moment.
Un bel exemple comment utiliser le link
pourrait être trouvé ici: Création de directives personnalisées . Voir l'exemple: Création d'une directive qui manipule le DOM , qui insère une "date-heure" dans la page, actualisée toutes les secondes.
Juste un extrait très court de cette riche source ci-dessus, montrant la vraie manipulation avec DOM. Il y a une fonction accrochée au service $ timeout, et elle est également effacée dans son appel de destructeur pour éviter les fuites de mémoire
.directive('myCurrentTime', function($timeout, dateFilter) {
function link(scope, element, attrs) {
...
// the not MVC job must be done
function updateTime() {
element.text(dateFilter(new Date(), format)); // here we are manipulating the DOM
}
function scheduleUpdate() {
// save the timeoutId for canceling
timeoutId = $timeout(function() {
updateTime(); // update DOM
scheduleUpdate(); // schedule the next update
}, 1000);
}
element.on('$destroy', function() {
$timeout.cancel(timeoutId);
});
...
$watch
,$digest
et$apply
. "?