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