Đăng ký chức năng của trẻ khi cha mẹ khởi tạo. Tôi đã sử dụng ký hiệu "làm" để rõ ràng trong mẫu.
MẪU
<div ng-controller="ParentCntl as p">
<div ng-controller="ChildCntl as c" ng-init="p.init(c.get)"></div>
</div>
KIỂM SOÁT
...
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
isn't supposed to be used this way!". Vâng, vâng, nhưng
- tài liệu mà không giải thích lý do tại sao không, và
- Tôi không tin rằng các tác giả tài liệu được coi là trường hợp sử dụng ALL có thể cho nó.
Tôi nói đây là cách sử dụng tốt cho nó. Nếu bạn muốn downvote tôi, xin vui lòng bình luận với lý do! :)
Tôi thích cách tiếp cận này vì nó giữ các thành phần mô đun hơn. Các ràng buộc duy nhất là trong các mẫu, và có nghĩa là
- đứa trẻ điều khiển không cần phải biết gì về những đối tượng để thêm chức năng của nó để (như trong câu trả lời @ canttouchit của)
- điều khiển cha mẹ có thể sử dụng với bất kỳ kiểm soát trẻ em khác trong đó có một chức năng get
- không yêu cầu phát sóng, mà sẽ nhận được rất xấu xí 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 gần gũi hơn Tero's idea of modularising with directives (lưu ý trong mô-đun của mình ví dụ ed, contestants
được chuyển từ cấp độ gốc sang chỉ mục "con" trong MẪU).
Thực tế giải pháp khác có thể là xem xét việc triển khai ChildCntl
làm chỉ thị và sử dụng liên kết &
để đăng ký phương thức init
.
Đặt cược tốt nhất, xác định dịch vụ, đưa dịch vụ đó vào cả hai bộ điều khiển. Hoặc sử dụng rootscope. – tymeJV