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({
// 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();
};
}
}
});
Ця директива використовує ngModelконтролер для отримання та встановлення значення кольору з кольорового вибору. Дивіться цей приклад JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/
Якщо ви використовуєте require: 'ngModel', ви, мабуть, також не повинні використовувати ngModel: '='у своєму виді ізоляції; the ngModelControllerнадає вам весь доступ, необхідний для зміни значення.
Нижній приклад на домашній сторінці AngularJS також використовує цю функцію (за винятком використання спеціального контролера, а не ngModel).
Що стосується регістру директиви, наприклад, ngModelvs ng-modelvs data-ng-model: в той час як Angular підтримує використання декількох форм у DOM, коли ви посилаєтесь на директиву за іменем (наприклад, при створенні директиви або використанні require), ви завжди використовуєте lowerCamelCase форма імені.
ng-model='property'