The 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'
,你可能不应该also正在使用ngModel: '='
在你的隔离范围内;这ngModelController
为您提供更改该值所需的所有访问权限。
底部的例子AngularJS 主页也使用此功能(除了使用自定义控制器,而不是ngModel
).
至于指令的大小写,例如,ngModel
vs ng-model
vs data-ng-model
:虽然 Angular 支持在 DOM 上使用多种形式,但当您通过名称引用指令时(例如,创建指令或使用require
),您始终使用名称的小驼峰形式。