Daftarkan fungsi anak pada orang tua ketika anak tersebut melakukan inisialisasi. Saya menggunakan "sebagai" notasi untuk kejelasan dalam template.
TEMPLATE
<div ng-controller="ParentCntl as p">
<div ng-controller="ChildCntl as c" ng-init="p.init(c.get)"></div>
</div>
PENGONTROL
...
function ParentCntl() {
var p = this;
p.init = function(fnToRegister) {
p.childGet = fnToRegister;
};
// call p.childGet when you want
}
function ChildCntl() {
var c = this;
c.get = function() {
return "LOL";
};
}
"Tapi", Anda berkata, " ng-init
tidak seharusnya digunakan dengan cara ini !". Ya, tapi
- dokumentasi itu tidak menjelaskan mengapa tidak, dan
- Saya tidak percaya penulis dokumentasi mempertimbangkan SEMUA kemungkinan kasus penggunaan untuk itu.
Saya mengatakan ini adalah penggunaan yang baik untuk itu. Jika Anda ingin downvote saya, silahkan berkomentar dengan alasan! :)
Saya suka pendekatan ini karena ini membuat komponen lebih modular. Binding hanya ada di template, dan artinya
- Pengontrol anak tidak harus tahu apa-apa tentang objek mana yang akan ditambahkan fungsinya (seperti dalam jawaban @ canttouchit)
- kontrol orang tua dapat digunakan dengan kontrol anak lain yang memiliki fungsi get
- tidak memerlukan penyiaran, yang akan menjadi sangat buruk di aplikasi besar kecuali Anda mengontrol ruang nama acara dengan ketat
Pendekatan ini lebih mendekati gagasan Tero tentang modularising dengan arahan (perhatikan bahwa dalam contoh modularised, contestants
diteruskan dari induk ke arahan "anak" DI TEMPLATE).
Memang solusi lain mungkin mempertimbangkan penerapan ChildCntl
sebagai arahan dan menggunakan &
pengikatan untuk mendaftarkan init
metode.