Tampaknya ada beberapa cara berkomunikasi antara arahan. Katakanlah Anda memiliki arahan bersarang, di mana arahan dalam harus mengkomunikasikan sesuatu ke luar (misalnya itu telah dipilih oleh pengguna).
<outer>
<inner></inner>
<inner></inner>
</outer>
Sejauh ini saya punya 5 cara untuk melakukan ini
require: arahan orang tua
The innerdirektif dapat memerlukan outerdirektif, yang dapat mengekspos beberapa metode pada controller-nya. Jadi dalam innerdefinisi
require: '^outer',
link: function(scope, iElement, iAttrs, outerController) {
// This can be passed to ng-click in the template
$scope.chosen = function() {
outerController.chosen(something);
}
}
Dan di outerpengontrol direktif:
controller: function($scope) {
this.chosen = function(something) {
}
}
$emit peristiwa
The innerdirektif bisa $emitsebuah acara, yang outerdirektif dapat merespon, melalui $on. Jadi dalam innerpengontrol direktif:
controller: function($scope) {
$scope.chosen = function() {
$scope.$emit('inner::chosen', something);
}
}
dan di outerpengontrol arahan:
controller: function($scope) {
$scope.$on('inner::chosen, function(e, data) {
}
}
Jalankan ekspresi dalam lingkup induk, melalui &
Item dapat mengikat ekspresi dalam lingkup induk, dan menjalankannya pada titik yang sesuai. HTML akan seperti:
<outer>
<inner inner-choose="functionOnOuter(item)"></inner>
<inner inner-choose="functionOnOuter(item)"></inner>
</outer>
Jadi innercontroller memiliki fungsi 'innerChoose' yang bisa dipanggil
scope: {
'innerChoose': '&'
},
controller: function() {
$scope.click = function() {
$scope.innerChoose({item:something});
}
}
yang akan memanggil (dalam hal ini) fungsi 'functionOnOuter' pada outerruang lingkup direktif:
controller: function($scope) {
$scope.functionOnOuter = function(item) {
}
}
Lingkup warisan pada lingkup non-terisolasi
Mengingat bahwa ini adalah pengontrol bersarang, pewarisan lingkup dapat digunakan, dan arahan dalam hanya dapat memanggil fungsi apa pun dalam rantai lingkup, asalkan tidak memiliki lingkup yang terisolasi). Jadi dalam innerarahan:
// scope: anything but a hash {}
controller: function() {
$scope.click = function() {
$scope.functionOnOuter(something);
}
}
Dan dalam outerarahan:
controller: function($scope) {
$scope.functionOnOuter = function(item) {
}
}
Dengan layanan disuntikkan ke dalam dan luar
Suatu layanan dapat disuntikkan ke dalam kedua arahan, sehingga mereka dapat memiliki akses langsung ke objek yang sama, atau memanggil fungsi untuk memberi tahu layanan, dan mungkin bahkan mendaftarkan diri mereka untuk diberitahukan, dalam sistem pub / sub sistem. Ini tidak membutuhkan arahan untuk disarangkan.
Pertanyaan : Apa saja potensi kelemahan dan kelebihan masing-masing dari yang lain?