chúng tôi đang cố gắng đạt được điều gì ở đây?
var modules = [
'ng', // angular module
'myApp', // custom module
function($provide){
$provide.value('$rootElement',$rootElement)
}
];
Đó là giống cũ dependency injection chúng tôi sử dụng ở khắp mọi nơi trong angularjs. Ở đây chúng tôi đang tiêm mô-đun ng
và đăng ký value vào đó.
Và cuối cùng chúng ta đang đi qua nó trong angular.injector()
var $injector = angular.injector(modules)
Vẫn không thuyết phục? Đây là phiên bản đơn giản (cách chúng ta sử dụng DI trong bộ điều khiển)
var $injector = angular.injector(['ng','myApp',function($provide){
$provide.value('$rootElement',$rootElement)
}])
Bây giờ hai câu hỏi,
tại sao chúng ta sử dụng angular.injector?
Vì, angular.injector tạo đối tượng đầu phun có thể được sử dụng để truy xuất dịch vụ cũng như cho việc tiêm phụ thuộc. Chúng tôi cần điều này để nhận được $ biên dịch dịch vụ và một trường hợp phạm vi để liên kết mẫu đó với.
tại sao chúng tôi đặt $rootElement
?
Để cho góc cạnh biết phần tử gốc của ứng dụng. Đã chú ý sử dụng document
trong angular.bootstrap(document,['myapp'])
? Đó là vì lý do tương tự.
Theo official documentation of $rootElement,
$ rootElement là một trong hai yếu tố nơi ngApp được tuyên bố hoặc yếu tố truyền vào angular.bootstrap.
Vì chúng tôi không sử dụng ng-app cũng như phương pháp angular.bootstrap chuẩn, chúng tôi phải đặt thủ công này.
Tiếp theo, chúng tôi cố gắng nhận dịch vụ $compile
từ trường hợp của bộ phun mà chúng tôi vừa nhận được từ bước trên.
var $compile = $injector.get('$compile');
Dịch vụ biên dịch $ là dịch vụ để sử dụng để biên soạn. Gọi $ biên dịch chống lại một đánh dấu sẽ tạo ra một chức năng mà bạn có thể sử dụng để ràng buộc đánh dấu với một đặc biệt phạm vi (những gì góc gọi một chức năng liên kết)
lần nữa để có được phạm vi, chúng tôi sử dụng $injector.get('$rootScope')
và vượt qua nó trên đến hàm liên kết tổng hợp mà chúng tôi nhận được từ $ compile.
angular.bootstrap(document,[myApp])
chỉ là một đường cú pháp trên các bước được đề cập ở trên. Nó tạo ra một thể hiện của bộ phun, thiết lập các dịch vụ liên quan với sự trợ giúp của nó, tạo ra phạm vi ứng dụng rộng và cuối cùng biên dịch khuôn mẫu.
Điều này hiển nhiên từ official documentation for angular.bootstrap, trong đó đề cập rõ ràng rằng nó trả về phiên bản của trình phun.
ô tô. $ Injector Trả về phun mới được tạo ra cho ứng dụng này
Cùng câu chuyện được nêu trong official bootstrap guide
Lưu ý rằng chúng tôi cung cấp tên của module ứng dụng của chúng tôi được nạp vào đầu phunlàm tham số thứ hai của angular.bootstrap chức năng. Lưu ý rằng angular.bootstrap sẽ không tạo mô-đun trên chuyến bay . Bạn phải tạo bất kỳ mô đun tùy chỉnh nào trước khi chuyển chúng thành thông số .
Cuối cùng, không cần thiết phải say..all này phải được thực hiện sau khi HTML Document được nạp và DOM đã sẵn sàng.
EDIT
Dưới đây là một đại diện sơ đồ của quá trình này. angular.bootstrap process http://www.dotnet-tricks.com/Content/images/angularjs/bootstrap.png Image Reference
Hy vọng nó sẽ giúp :)
Tôi nghĩ rằng có lẽ câu hỏi của bạn là quá rộng. Bất kỳ cơ hội nào bạn có thể thu hẹp nó xuống? – hkBst
@hkBst: Không chắc chắn làm thế nào để làm trong ques này. Tôi muốn hiểu những gì xảy ra dưới mui xe và tôi đã cung cấp tất cả các bước. Đó là y tôi đã giữ bounty về điều này: ( –