La requireinstrucción le da el controlador para la directiva que nombra como el cuarto argumento de su linkfunción. (Puede usar ^para buscar el controlador en un elemento padre; lo ?hace opcional). Entonces require: 'ngModel'le da el controlador para la ngModeldirectiva, que es unngModelController .
Los controladores de directivas se pueden escribir para proporcionar API que pueden utilizar otras directivas; con ngModelController, obtiene acceso a funciones especiales integradas ngModel, incluida la obtención y el establecimiento del valor. Considere el siguiente ejemplo:
<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();
};
}
}
});
Esta directiva usa el ngModelcontrolador para obtener y establecer el valor del color del selector de colores. Vea este ejemplo de JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/
Si está usando require: 'ngModel', probablemente no debería usarlo tambiénngModel: '=' en su alcance aislado; el ngModelControllerque da todo el acceso que necesita para cambiar el valor.
El ejemplo inferior en la página de inicio de AngularJS también usa esta funcionalidad (excepto que usa un controlador personalizado, no ngModel).
En cuanto a las mayúsculas y minúsculas de una directiva, por ejemplo, ngModelvs ng-modelvs data-ng-model: mientras que Angular admite el uso de múltiples formularios en el DOM, cuando se refiere a una directiva por su nombre (por ejemplo, al crear una directiva o al usarla require), siempre usa lowerCamelCase forma del nombre.
ng-model='property'