2013-05-14 39 views
41

Tôi đã thấy những điều sau đây:Tôi nên sử dụng phương pháp nào để khởi động thủ công AngularJS của mình?

angular.bootstrap(document, ['TodoApp']); 
angular.bootstrap(angular.element("body")[0], ['TodoApp']); 

Ngoài ra các tài liệu đề cập đến AngularJS này mà tôi không thực sự hiểu.

angular.element(document).ready(function() { 
    angular.bootstrap(document); 
    }); 

Có sự khác biệt nào giữa các phương pháp này không? Cụ thể phương pháp cuối cùng từ tài liệu Góc là gì? Là một trong bất kỳ tốt hơn để sử dụng hơn khác?

+1

Không phải là câu trả lời, mà là giải thích: cách thứ ba chỉ là trình bao bọc xung quanh jQuery Lite. Đây là một cách tiêu chuẩn để chạy một số mã khi tài liệu đã được tải đầy đủ và việc thực thi tập lệnh của bạn có thể bắt đầu. Nếu bạn tìm kiếm bất kỳ hướng dẫn jquery, sau đó bạn sẽ tìm thấy một cái gì đó như '$ (tài liệu) .ready (function() {...})'. Trong Angular 'angular.element (str)' tương tự như '$ (str)'. Nhưng hãy nhớ rằng điều này sẽ sử dụng jQuery Lite, không phải jQuery thông thường. –

Trả lời

64

Họ là gần như nhau, với một vài sự khác biệt:


angular.bootstrap(document, ['TodoApp']); 

này sẽ làm việc nếu bạn có kịch bản của bạn nạp ở phần cuối của trang (thay vì trong tiêu đề).

Nếu không, DOM sẽ không được nạp tại thời điểm bootrsaping ứng dụng (sẽ không có bất kỳ mẫu nào được biên dịch, các chỉ thị sẽ không có bất kỳ tác dụng).

Cái này hoạt động: plnkr

Cái này không: plnkr


angular.bootstrap(angular.element("body")[0], ['TodoApp']); 

Giống như trước đây, sử dụng body như thư mục gốc của ứng dụng. Nó sử dụng một bộ chọn không có sẵn trong jqLite, vì vậy bạn cần có toàn bộ jQuery được bao gồm trong ứng dụng.

Tôi không chắc chắn lợi thế của việc sử dụng body thay document là gì, nhưng có lẽ có cái gì để làm với E2E thử nghiệm, như được giải thích trong này comment

plknr


angular.element(document).ready(function() { 
    angular.bootstrap(document); 
}); 

Cái này thực sự là đợi cho DOM được tải, vì vậy nó sẽ hoạt động ngay cả khi bạn bao gồm bạn r script trong tiêu đề.

Điều này về cơ bản giống như của jQuery $(document).ready(, nhưng sử dụng jqLite 's angular.element.


Trong ví dụ cuối cùng, không có module đang được truyền cho hàm bootstrap, nhiều khả năng bạn sẽ cần phải khai báo mô-đun chính của bạn, trừ khi ứng dụng của bạn bao gồm chỉ trên bộ điều khiển trong không gian tên toàn cầu.

Vì vậy, lựa chọn cuối cùng sẽ như thế nào sau đây, để có tương tự như hai người kia:

angular.element(document).ready(function() { 
    angular.bootstrap(document, ['TodoApp']); 
}); 

plknr

Tôi đoán rằng hầu hết thời gian đặt cược an toàn nhất là sử dụng cuối cùng này tiếp cận.

+0

Cảm ơn sự giúp đỡ của bạn. Một vài câu hỏi. Tôi nhìn vào những người bạn của bạn nhưng tôi nhận thấy tôi không thể thấy nội dung của tệp script.js. Tôi cố gắng bấm vào script.js nhưng nó sẽ không cho phép tôi nhấp vào nó. Đây có phải là vì bạn đã đánh dấu chúng là riêng tư không? Trong trường hợp của tôi, chúng tôi không sử dụng jQuery. Vậy phương pháp bạn đề xuất cho những người không sử dụng jQuery là gì? Cảm ơn bạn –

+1

jQuery là không cần thiết ở tất cả cho góc, trừ khi bạn làm điều giống như ví dụ thứ hai. Điều cuối cùng có vẻ tốt hơn với tôi, mà làm việc mà không cần jQuery. Ngoài ra, ví dụ trong tài liệu góc theo sau cách tiếp cận của việc chờ DOM sẵn sàng. – gargc

+0

Về plnkr của ... tôi không biết những gì có thể sai, họ là vô danh, tôi không thấy bất kỳ cài đặt đặc biệt. – gargc

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