L' require
instruction vous donne le contrôleur de la directive que vous nommez comme quatrième argument de votre link
fonction. (Vous pouvez utiliser ^
pour rechercher le contrôleur sur un élément parent; le ?
rend facultatif.) require: 'ngModel'
Vous donne donc le contrôleur pour la ngModel
directive, qui est unngModelController
.
Les contrôleurs de directive peuvent être écrits pour fournir des API que d'autres directives peuvent utiliser; avec ngModelController
, vous avez accès à des fonctionnalités spéciales intégrées ngModel
, notamment l'obtention et la définition de la valeur. Prenons l'exemple suivant:
<input color-picker ng-model="project.color">
app.directive('colorPicker', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
element.colorPicker({
// initialize the color to the color on the scope
pickerDefault: scope.color,
// update the ngModel whenever we pick a new color
onColorChange: function(id, newValue) {
scope.$apply(function() {
ngModel.$setViewValue(newValue);
});
}
});
// update the color picker whenever the value on the scope changes
ngModel.$render = function() {
element.val(ngModel.$modelValue);
element.change();
};
}
}
});
Cette directive utilise le ngModel
contrôleur pour obtenir et définir la valeur de la couleur à partir du sélecteur de couleurs. Voir cet exemple JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/
Si vous utilisez require: 'ngModel'
, vous ne devriez probablement pas également l'utiliser ngModel: '='
dans votre champ d'isolat; le ngModelController
vous donne tous les accès dont vous avez besoin pour modifier la valeur.
L'exemple du bas de la page d'accueil AngularJS utilise également cette fonctionnalité (sauf en utilisant un contrôleur personnalisé, pas ngModel
).
En ce qui concerne la casse d'une directive, par exemple, ngModel
vs ng-model
vs data-ng-model
: alors que Angular prend en charge l'utilisation de plusieurs formulaires sur le DOM, lorsque vous faites référence à une directive par son nom (par exemple, lors de la création d'une directive, ou de l'utilisation require
), vous utilisez toujours le lowerCamelCase forme du nom.
ng-model='property'