2012-11-30 41 views
16

Tôi có một hàm chia sẻ trả về phạm vi của phần tử trên cùng (tài liệu) trong ứng dụng AngularJS của tôi.

function topScope() { 
    return angular.element(document).scope(); 
} 

Điều này luôn hoạt động và tôi luôn đảm bảo có quyền truy cập vào bất kỳ subscopes nào nằm trong ứng dụng (cho dù nằm trong bộ điều khiển hoặc chỉ thị).

Dưới đây là một ví dụ về những gì tôi sẽ sử dụng nó cho:

topScope().$emit('pageReady'); 

Bây giờ tôi đã nhận thấy rằng $ rootScope cũng hoạt động theo cách tương tự.

$rootScope.$emit('pageReady'); 

Điều gì cũng hoạt động và đạt được tác động tương tự. Nhưng vì $ rootScope được thiết kế là phạm vi "$ scope off the shelf" (bất kỳ phạm vi nào được tạo ra sẽ kế thừa các phương thức và thuộc tính của nó) thì điều này có nghĩa là thực tế nó là phạm vi trên cùng của trang? Vì vậy, là cha mẹ của đối tượng phạm vi được gắn vào nút tài liệu?

+0

Có, RootScope là cha mẹ của tất cả các phạm vi. – ganaraj

Trả lời

23

$rootScope là phạm vi gốc của tất cả phạm vi trong ứng dụng AngularJS đã cho. Vì có thể khởi động nhiều ứng dụng AngularJS trên một trang (chỉ theo cách thủ công, điều này không thể thực hiện được bằng cách sử dụng ng-app) nó cũng có thể có nhiều phiên bản $rootScope trong một tài liệu HTML.

Mỗi $rootScope được "đính kèm" vào phần tử mà ngApp được khai báo hoặc phần tử được chuyển thành angular.bootstrap như được mô tả here.

Tóm lại, $rootScope là gốc của tất cả phạm vi cho một ứng dụng AngularJS nhưng không có phạm vi "siêu gốc" sẽ đóng vai trò là phạm vi cha mẹ của tất cả các phạm vi khác cho tài liệu HTML đã cho.

Trong trường hợp của bạn, sử dụng $rootScope có thể là OK nếu bạn chỉ có một ứng dụng AngularJS trong toàn bộ tài liệu HTML.

+7

Điều này là chính xác. Lưu ý phụ, nếu bạn có hai $ rootScopes bởi vì bạn có hai ứng dụng và bạn cần họ nói chuyện với nhau, bạn có thể sử dụng $ window ... Có vẻ như một trường hợp cạnh, nhưng nó đáng nhắc đến. –

Các vấn đề liên quan