Đăng ký chức năng của trẻ trên cha mẹ khi trẻ đang khởi tạo. Tôi đã sử dụng ký hiệu "as" để rõ ràng trong mẫu.
BẢN MẪU
<div ng-controller="ParentCntl as p">
<div ng-controller="ChildCntl as c" ng-init="p.init(c.get)"></div>
</div>
NGƯỜI ĐIỀU KHIỂN
...
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";
};
}
"Nhưng", bạn nói, " ng-init
không được sử dụng theo cách này !". Vâng, vâng, nhưng
- tài liệu đó không giải thích tại sao không, và
- Tôi không tin rằng các tác giả tài liệu đã xem xét TẤT CẢ các trường hợp sử dụng có thể cho nó.
Tôi nói đây là một công dụng tốt cho nó. Nếu bạn muốn downvote tôi, hãy comment với lý do! :)
Tôi thích cách tiếp cận này vì nó giữ cho các thành phần mô-đun hơn. Các ràng buộc duy nhất có trong mẫu và có nghĩa là
- Bộ điều khiển con không phải biết bất kỳ điều gì về đối tượng nào để thêm chức năng của nó vào (như trong câu trả lời của @ canttouchit)
- kiểm soát của cha mẹ có thể được sử dụng với bất kỳ kiểm soát con nào khác có chức năng get
- không yêu cầu phát sóng, điều này sẽ rất xấu trong một ứng dụng lớn trừ khi bạn kiểm soát chặt chẽ không gian tên sự kiện
Cách tiếp cận này tiếp cận chặt chẽ hơn với ý tưởng của Tero về việc điều biến với các chỉ thị (lưu ý rằng trong ví dụ contestants
được điều chỉnh của anh ấy, được chuyển từ chỉ thị mẹ sang chỉ thị "con" TRONG TEMPLATE).
Thật vậy, một giải pháp khác có thể là xem xét việc triển khai ChildCntl
như một chỉ thị và sử dụng &
ràng buộc để đăng ký init
phương thức.