The require
instruksi memberi Anda controller untuk direktif Anda nama sebagai argumen keempat untuk Anda link
fungsi. (Anda dapat menggunakan ^
untuk mencari pengontrol pada elemen induk; ?
menjadikannya opsional.) Jadi, require: 'ngModel'
memberi Anda pengontrol untuk ngModel
direktif, yang merupakanngModelController
.
Pengontrol arahan dapat ditulis untuk menyediakan API yang dapat digunakan oleh arahan lain; dengan ngModelController
, Anda mendapatkan akses ke fungsionalitas khusus yang ada di ngModel
dalamnya, termasuk mendapatkan dan menyetel nilainya. Perhatikan contoh berikut:
<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();
};
}
}
});
Direktif ini menggunakan ngModel
pengontrol untuk mendapatkan dan menyetel nilai warna dari colorpicker. Lihat contoh JSFiddle ini: http://jsfiddle.net/BinaryMuse/AnMhx/
Jika Anda menggunakan require: 'ngModel'
, Anda mungkin juga tidak boleh menggunakan ngModel: '='
dalam ruang lingkup isolasi Anda; yang ngModelController
memberi Anda semua akses yang Anda butuhkan untuk mengubah nilainya.
Contoh bawah di beranda AngularJS juga menggunakan fungsionalitas ini (kecuali menggunakan pengontrol khusus, bukan ngModel
).
Adapun casing direktif, misalnya, ngModel
vs ng-model
vs data-ng-model
: sementara Angular mendukung penggunaan beberapa bentuk di DOM, ketika Anda merujuk ke direktif dengan nama (misalnya, saat membuat direktif, atau menggunakan require
), Anda selalu menggunakan lowerCamelCase bentuk nama.
ng-model='property'