L' requireistruzione ti fornisce il controller per la direttiva che chiami come quarto argomento della tua linkfunzione. (Puoi usare ^per cercare il controller su un elemento genitore; lo ?rende opzionale.) Quindi require: 'ngModel'ti dà il controller per la ngModeldirettiva, che è un filengModelController .
È possibile scrivere controller di direttiva per fornire API utilizzabili da altre direttive; con ngModelController, hai accesso a funzionalità speciali incorporate ngModel, inclusa l'acquisizione e l'impostazione del valore. Considera il seguente esempio:
<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();
};
}
}
});
Questa direttiva utilizza il ngModelcontroller per ottenere e impostare il valore del colore dal colorpicker. Guarda questo esempio JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/
Se stai usando require: 'ngModel', probabilmente non dovrebbe anche utilizzare ngModel: '='nel vostro campo di applicazione isolare; la ngModelControllersi dà tutto l'accesso è necessario modificare il valore.
Anche l'esempio in basso sulla homepage di AngularJS utilizza questa funzionalità (tranne che per l'utilizzo di un controller personalizzato, non ngModel).
Per quanto riguarda l'involucro di una direttiva, ad esempio, ngModelvs ng-modelvs data-ng-model: mentre Angular supporta l'utilizzo di più moduli sul DOM, quando si fa riferimento a una direttiva per nome (ad esempio, quando si crea una direttiva o si utilizza require), si utilizza sempre lowerCamelCase forma del nome.
ng-model='property'