requireИнструкция дает контроллер для директивы вы назвать в качестве четвертого аргумента вашей linkфункции. (Вы можете использовать ^для поиска контроллера в родительском элементе; ?делает его необязательным.) Таким образом, require: 'ngModel'вы получаете контроллер для ngModelдирективы, которым являетсяngModelController .
Контроллеры директив могут быть написаны для предоставления API, которые могут использовать другие директивы; с помощью ngModelController, вы получаете доступ к специальным встроенным функциям ngModel, включая получение и установку значения. Рассмотрим следующий пример:
<input color-picker ng-model="project.color">
app.directive('colorPicker', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
element.colorPicker({
pickerDefault: scope.color,
onColorChange: function(id, newValue) {
scope.$apply(function() {
ngModel.$setViewValue(newValue);
});
}
});
ngModel.$render = function() {
element.val(ngModel.$modelValue);
element.change();
};
}
}
});
Эта директива использует ngModelконтроллер для получения и установки значения цвета из палитры цветов. См. Этот пример JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/
Если вы используете require: 'ngModel', вам, вероятно, также не следует использовать ngModel: '='в своей изолированной области; ngModelControllerдает вам все доступа вам необходимо изменить значение.
Нижний пример на домашней странице AngularJS также использует эту функциональность (за исключением использования настраиваемого контроллера ngModel).
Что касается корпуса директивы, например ngModelvs ng-modelvs data-ng-model: в то время как Angular поддерживает использование нескольких форм в DOM, когда вы ссылаетесь на директиву по имени (например, при создании директивы или использовании require), вы всегда используете lowerCamelCase форма имени.
ng-model='property'