A requireinstrução fornece o controlador para a diretiva nomeada como o quarto argumento para sua linkfunção. (Você pode usar ^para procurar o controlador em um elemento pai; ?torna-o opcional.) Portanto, require: 'ngModel'fornece o controlador para a ngModeldiretiva, que é umngModelController .
Os controladores de diretiva podem ser escritos para fornecer APIs que outras diretivas podem usar; com ngModelController, você obtém acesso a uma funcionalidade especial integrada ngModel, incluindo a obtenção e configuração do valor. Considere o seguinte exemplo:
<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 diretiva usa o ngModelcontrolador para obter e definir o valor da cor do seletor de cores. Veja este exemplo JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/
Se você estiver usando require: 'ngModel', provavelmente não deveria usar tambémngModel: '=' em seu escopo isolado; o ngModelControllerdá a você todo o acesso necessário para alterar o valor.
O exemplo inferior na página inicial do AngularJS também usa essa funcionalidade (exceto usando um controlador personalizado, não ngModel).
Quanto à capitalização de uma diretiva, por exemplo, ngModelvs ng-modelvs data-ng-model: enquanto Angular suporta o uso de vários formulários no DOM, quando você se refere a uma diretiva por nome (por exemplo, ao criar uma diretiva ou usando require), você sempre usa o lowerCamelCase forma do nome.
ng-model='property'