AngularJS so với jQuery
AngularJS và jQuery áp dụng các ý thức hệ rất khác nhau. Nếu bạn đến từ jQuery, bạn có thể thấy một số khác biệt đáng ngạc nhiên. Angular có thể làm bạn tức giận.
Điều này là bình thường, bạn nên đẩy qua. Angular là giá trị nó.
Sự khác biệt lớn (TLDR)
jQuery cung cấp cho bạn một bộ công cụ để chọn các bit tùy ý của DOM và thực hiện các thay đổi đặc biệt đối với chúng. Bạn có thể làm khá nhiều thứ bạn thích từng mảnh.
AngularJS thay vào đó cung cấp cho bạn một trình biên dịch .
Điều này có nghĩa là AngularJS đọc toàn bộ DOM của bạn từ trên xuống dưới và coi nó là mã, theo nghĩa đen là hướng dẫn cho trình biên dịch. Khi nó đi qua DOM, Nó tìm kiếm các chỉ thị cụ thể (chỉ thị của trình biên dịch) cho trình biên dịch AngularJS biết cách ứng xử và phải làm gì. Chỉ thị là các đối tượng nhỏ chứa đầy JavaScript có thể khớp với các thuộc tính, thẻ, lớp hoặc thậm chí là nhận xét.
Khi trình biên dịch Angular xác định rằng một phần của DOM khớp với một lệnh cụ thể, nó gọi hàm chỉ thị, truyền cho nó phần tử DOM, bất kỳ thuộc tính nào, phạm vi $ hiện tại (là một kho lưu trữ biến cục bộ) và một số bit hữu ích khác. Các thuộc tính này có thể chứa các biểu thức có thể được Chỉ thị giải thích và cho biết cách hiển thị và khi nào nó nên vẽ lại.
Các chỉ thị sau đó có thể lần lượt kéo các thành phần Angular bổ sung như bộ điều khiển, dịch vụ, v.v ... Thứ xuất hiện dưới cùng của trình biên dịch là một ứng dụng web được hình thành đầy đủ, có dây và sẵn sàng hoạt động.
Điều này có nghĩa là Angular là Driven Template . Mẫu của bạn điều khiển JavaScript, không phải theo cách khác. Đây là một sự đảo ngược hoàn toàn của các vai trò và hoàn toàn trái ngược với JavaScript không phô trương mà chúng tôi đã viết trong 10 năm qua hoặc lâu hơn. Điều này có thể mất một số làm quen.
Nếu điều này nghe có vẻ như quá mức quy định và giới hạn, không có gì có thể xa hơn sự thật. Vì AngularJS coi HTML của bạn dưới dạng mã, bạn có được mức độ chi tiết của HTML trong ứng dụng web của mình . Mọi thứ đều có thể, và hầu hết mọi thứ đều dễ dàng một cách đáng ngạc nhiên khi bạn thực hiện một vài bước nhảy vọt về mặt khái niệm.
Chúng ta hãy xuống gritty nitty.
Đầu tiên, Angular không thay thế jQuery
Angular và jQuery làm những việc khác nhau. AngularJS cung cấp cho bạn một bộ công cụ để sản xuất các ứng dụng web. jQuery chủ yếu cung cấp cho bạn các công cụ để sửa đổi DOM. Nếu jQuery có mặt trên trang của bạn, AngularJS sẽ tự động sử dụng nó. Nếu không, AngularJS vận chuyển với jQuery Lite, đây là phiên bản rút gọn nhưng vẫn hoàn toàn có thể sử dụng được của jQuery.
Misko thích jQuery và không phản đối bạn khi sử dụng nó. Tuy nhiên, bạn sẽ thấy rằng bạn tiến bộ rằng bạn có thể hoàn thành khá nhiều công việc của mình bằng cách sử dụng kết hợp phạm vi, mẫu và chỉ thị, và bạn nên thích quy trình công việc này khi có thể vì mã của bạn sẽ rời rạc hơn, dễ cấu hình hơn và hơn thế nữa Góc cạnh.
Nếu bạn sử dụng jQuery, bạn không nên rắc nó khắp nơi. Vị trí chính xác cho thao tác DOM trong AngularJS là trong một lệnh. Thêm về những điều này sau.
JavaScript không phô trương với Bộ chọn so với Mẫu khai báo
jQuery thường được áp dụng không phô trương. Mã JavaScript của bạn được liên kết trong tiêu đề (hoặc chân trang) và đây là nơi duy nhất được đề cập. Chúng tôi sử dụng các công cụ chọn để chọn ra các bit của trang và viết các plugin để sửa đổi các phần đó.
JavaScript nằm trong tầm kiểm soát. HTML có một sự tồn tại hoàn toàn độc lập. HTML của bạn vẫn còn ngữ nghĩa ngay cả khi không có JavaScript. Thuộc tính Onclick là thực hành rất xấu.
Một trong những điều đầu tiên bạn sẽ chú ý về AngularJS là các thuộc tính tùy chỉnh có ở mọi nơi . HTML của bạn sẽ được lấp đầy với các thuộc tính ng, về cơ bản là các thuộc tính onClick trên steroid. Đây là các chỉ thị (chỉ thị của trình biên dịch) và là một trong những cách chính trong đó mẫu được nối với mô hình.
Khi bạn lần đầu tiên nhìn thấy điều này, bạn có thể muốn viết AngularJS như JavaScript xâm nhập trường học cũ (như tôi đã làm lúc đầu). Trên thực tế, AngularJS không chơi theo những quy tắc đó. Trong AngularJS, HTML5 của bạn là một mẫu. Nó được biên soạn bởi AngularJS để sản xuất trang web của bạn.
Đây là sự khác biệt lớn đầu tiên. Đối với jQuery, trang web của bạn là một DOM cần được thao tác. Đối với AngularJS, HTML của bạn là mã được biên dịch. AngularJS đọc trong toàn bộ trang web của bạn và thực sự biên dịch nó thành một trang web mới bằng trình biên dịch tích hợp.
Mẫu của bạn nên được khai báo; ý nghĩa của nó nên rõ ràng đơn giản bằng cách đọc nó. Chúng tôi sử dụng các thuộc tính tùy chỉnh với tên có ý nghĩa. Chúng tôi tạo ra các yếu tố HTML mới, một lần nữa với các tên có ý nghĩa. Một nhà thiết kế có kiến thức HTML tối thiểu và không có kỹ năng mã hóa có thể đọc mẫu AngularJS của bạn và hiểu những gì nó đang làm. Anh ấy hoặc cô ấy có thể sửa đổi. Đây là cách Angular.
Các mẫu là trong ghế lái xe.
Một trong những câu hỏi đầu tiên tôi tự hỏi mình khi bắt đầu AngularJS và chạy qua các hướng dẫn là "Mã của tôi ở đâu?" . Tôi đã viết không có JavaScript và tôi có tất cả hành vi này. Câu trả lời là rõ ràng. Vì AngularJS biên dịch DOM, AngularJS đang coi HTML của bạn dưới dạng mã. Đối với nhiều trường hợp đơn giản, chỉ cần viết một mẫu và để AngularJS biên dịch nó thành một ứng dụng cho bạn là đủ.
Mẫu của bạn điều khiển ứng dụng của bạn. Nó được coi là DSL . Bạn viết các thành phần AngularJS và AngularJS sẽ đảm nhiệm việc kéo chúng vào và làm cho chúng có sẵn vào đúng thời điểm dựa trên cấu trúc của mẫu của bạn. Điều này rất khác với một mẫu MVC tiêu chuẩn , trong đó mẫu chỉ dành cho đầu ra.
Nó giống với XSLT hơn là Ruby on Rails chẳng hạn.
Đây là một sự đảo ngược triệt để của kiểm soát mà một số làm quen.
Ngừng cố gắng lái ứng dụng của bạn từ JavaScript của bạn. Hãy để mẫu điều khiển ứng dụng và để AngularJS đảm nhiệm việc nối các thành phần lại với nhau. Đây cũng là cách Angular.
HTML ngữ nghĩa so với mô hình ngữ nghĩa
Với jQuery, trang HTML của bạn sẽ chứa nội dung có ý nghĩa ngữ nghĩa. Nếu JavaScript bị tắt (bởi người dùng hoặc công cụ tìm kiếm), nội dung của bạn vẫn có thể truy cập được.
Bởi vì AngularJS coi trang HTML của bạn dưới dạng mẫu. Mẫu không được coi là ngữ nghĩa vì nội dung của bạn thường được lưu trữ trong mô hình của bạn, cuối cùng xuất phát từ API của bạn. AngularJS biên dịch DOM của bạn với mô hình để tạo ra một trang web ngữ nghĩa.
Nguồn HTML của bạn không còn là ngữ nghĩa, thay vào đó, API và DOM được biên dịch của bạn là ngữ nghĩa.
Trong AngularJS, có nghĩa là sống trong mô hình, HTML chỉ là một mẫu, chỉ để hiển thị.
Tại thời điểm này, bạn có thể có tất cả các loại câu hỏi liên quan đến SEO và khả năng truy cập, và đúng như vậy. Có những vấn đề mở ở đây. Hầu hết các trình đọc màn hình bây giờ sẽ phân tích JavaScript. Công cụ tìm kiếm cũng có thể lập chỉ mục nội dung AJAXed . Tuy nhiên, bạn sẽ muốn đảm bảo rằng bạn đang sử dụng URL đẩy và bạn có một sơ đồ trang web phù hợp. Xem ở đây để thảo luận về vấn đề: https://stackoverflow.com/a/23245379/687677
Phân tách mối quan tâm (SOC) so với MVC
Tách biệt mối quan tâm (SOC) là một mô hình phát triển qua nhiều năm phát triển web vì nhiều lý do bao gồm SEO, khả năng truy cập và không tương thích trình duyệt. Nó trông như thế này:
- HTML - Ý nghĩa ngữ nghĩa. HTML nên đứng một mình.
- CSS - Kiểu dáng, không có CSS, trang vẫn có thể đọc được.
- JavaScript - Hành vi, không có tập lệnh, nội dung vẫn còn.
Một lần nữa, AngularJS không chơi theo luật của họ. Trong một cơn đột quỵ, AngularJS đã loại bỏ một thập kỷ khôn ngoan nhận được và thay vào đó thực hiện một mô hình MVC trong đó mẫu không còn là ngữ nghĩa, thậm chí không một chút.
Nó trông như thế này:
- Mô hình - mô hình của bạn chứa dữ liệu ngữ nghĩa của bạn. Các mô hình thường là các đối tượng JSON . Các mô hình tồn tại dưới dạng các thuộc tính của một đối tượng được gọi là $ scope. Bạn cũng có thể lưu trữ các hàm tiện ích tiện dụng trên $ scope mà mẫu của bạn có thể truy cập.
- Chế độ xem - Quan điểm của bạn được viết bằng HTML. Khung nhìn thường không phải là ngữ nghĩa vì dữ liệu của bạn nằm trong mô hình.
- Trình điều khiển - Trình điều khiển của bạn là một hàm JavaScript nối khung nhìn vào mô hình. Chức năng của nó là khởi tạo $ scope. Tùy thuộc vào ứng dụng của bạn, bạn có thể hoặc không cần tạo bộ điều khiển. Bạn có thể có nhiều bộ điều khiển trên một trang.
MVC và SOC không nằm ở hai đầu đối diện của cùng một tỷ lệ, chúng nằm trên các trục hoàn toàn khác nhau. SOC không có ý nghĩa trong bối cảnh AngularJS. Bạn phải quên nó và đi tiếp.
Nếu, giống như tôi, bạn đã sống qua các cuộc chiến trình duyệt, bạn có thể thấy ý tưởng này khá phản cảm. Hãy vượt qua nó, nó sẽ có giá trị, tôi hứa.
Plugin so với chỉ thị
Các plugin mở rộng jQuery. AngularJS Chỉ thị mở rộng khả năng của trình duyệt của bạn.
Trong jQuery, chúng tôi xác định các plugin bằng cách thêm các hàm vào jQuery.prototype. Sau đó, chúng tôi nối chúng vào DOM bằng cách chọn các thành phần và gọi plugin trên kết quả. Ý tưởng là mở rộng các khả năng của jQuery.
Ví dụ: nếu bạn muốn một băng chuyền trên trang của mình, bạn có thể xác định một danh sách các số liệu không có thứ tự, có thể được bọc trong một yếu tố điều hướng. Sau đó, bạn có thể viết một số jQuery để chọn danh sách trên trang và sắp xếp lại nó dưới dạng một bộ sưu tập với thời gian chờ để thực hiện hoạt hình trượt.
Trong AngularJS, chúng tôi xác định các chỉ thị. Lệnh này là một hàm trả về một đối tượng JSON. Đối tượng này cho AngularJS biết các phần tử DOM cần tìm và những thay đổi để thực hiện đối với chúng. Các chỉ thị được nối vào mẫu bằng cách sử dụng các thuộc tính hoặc thành phần mà bạn phát minh ra. Ý tưởng là mở rộng khả năng của HTML với các thuộc tính và thành phần mới.
Cách AngularJS là mở rộng khả năng của HTML tìm kiếm gốc. Bạn nên viết HTML trông giống như HTML, được mở rộng với các thuộc tính và thành phần tùy chỉnh.
Nếu bạn muốn một băng chuyền, chỉ cần sử dụng một <carousel />
yếu tố, sau đó xác định một lệnh để lấy một mẫu và làm cho trình hút đó hoạt động.
Rất nhiều chỉ thị nhỏ so với các plugin lớn có công tắc cấu hình
Xu hướng với jQuery là viết các plugin lớn như hộp đèn mà sau đó chúng ta định cấu hình bằng cách chuyển qua nhiều giá trị và tùy chọn.
Đây là một sai lầm trong AngularJS.
Lấy ví dụ về một thả xuống. Khi viết một trình đơn thả xuống, bạn có thể muốn viết mã trong trình xử lý nhấp chuột, có thể là một chức năng để thêm một chevron lên hoặc xuống, có thể thay đổi lớp của phần tử chưa mở, hiển thị ẩn menu, tất cả nội dung hữu ích.
Cho đến khi bạn muốn thực hiện một thay đổi nhỏ.
Giả sử bạn có một menu mà bạn muốn mở ra khi di chuột. Bây giờ chúng tôi có một vấn đề. Plugin của chúng tôi có dây trong trình xử lý nhấp chuột cho chúng tôi, chúng tôi sẽ cần thêm tùy chọn cấu hình để làm cho nó hoạt động khác đi trong trường hợp cụ thể này.
Trong AngularJS chúng tôi viết các chỉ thị nhỏ hơn. Chỉ thị thả xuống của chúng tôi sẽ rất nhỏ. Nó có thể duy trì trạng thái gấp và cung cấp các phương thức để gập (), mở ra () hoặc chuyển đổi (). Các phương thức này chỉ đơn giản là cập nhật $ scope.menu.visible, một boolean giữ trạng thái.
Bây giờ trong mẫu của chúng tôi, chúng tôi có thể kết nối này:
<a ng-click="toggle()">Menu</a>
<ul ng-show="menu.visible">
...
</ul>
Cần cập nhật trên mouseover?
<a ng-mouseenter="unfold()" ng-mouseleave="fold()">Menu</a>
<ul ng-show="menu.visible">
...
</ul>
Mẫu điều khiển ứng dụng để chúng tôi có được mức độ chi tiết HTML. Nếu chúng ta muốn tạo trường hợp ngoại lệ theo từng trường hợp, mẫu sẽ làm điều này dễ dàng.
Đóng cửa so với phạm vi $
Các plugin JQuery được tạo trong một bao đóng. Quyền riêng tư được duy trì trong phạm vi đóng cửa đó. Tùy thuộc vào bạn để duy trì chuỗi phạm vi của bạn trong phạm vi đóng cửa đó. Bạn chỉ thực sự có quyền truy cập vào tập hợp các nút DOM được jQuery truyền vào plugin, cộng với bất kỳ biến cục bộ nào được xác định trong bao đóng và bất kỳ toàn cục nào bạn đã xác định. Điều này có nghĩa là các plugin khá khép kín. Đây là một điều tốt, nhưng có thể bị hạn chế khi tạo toàn bộ ứng dụng. Cố gắng truyền dữ liệu giữa các phần của trang động trở thành một việc vặt.
AngularJS có các đối tượng $ scope. Đây là những đối tượng đặc biệt được tạo và duy trì bởi AngularJS nơi bạn lưu trữ mô hình của mình. Một số chỉ thị nhất định sẽ sinh ra một phạm vi $ mới, theo mặc định kế thừa từ phạm vi gói của nó bằng cách sử dụng kế thừa nguyên mẫu JavaScript. Đối tượng $ scope có thể truy cập được trong bộ điều khiển và khung nhìn.
Đây là phần thông minh. Do cấu trúc của thừa kế phạm vi $ gần như theo cấu trúc của DOM, nên các phần tử có quyền truy cập vào phạm vi riêng của chúng và mọi phạm vi có chứa liền mạch, cho đến phạm vi toàn cầu $ (không giống với phạm vi toàn cầu).
Điều này giúp việc truyền dữ liệu xung quanh dễ dàng hơn và lưu trữ dữ liệu ở mức phù hợp. Nếu một danh sách thả xuống được mở ra, chỉ có phạm vi $ thả xuống cần biết về nó. Nếu người dùng cập nhật tùy chọn của họ, bạn có thể muốn cập nhật phạm vi $ toàn cầu và mọi phạm vi lồng nhau lắng nghe tùy chọn người dùng sẽ tự động được cảnh báo.
Điều này nghe có vẻ phức tạp, trên thực tế, một khi bạn thư giãn vào nó, nó giống như đang bay. Bạn không cần phải tạo đối tượng $ scope, AngularJS khởi tạo và định cấu hình nó cho bạn, một cách chính xác và phù hợp dựa trên hệ thống phân cấp mẫu của bạn. AngularJS sau đó làm cho nó có sẵn cho thành phần của bạn bằng cách sử dụng phép thuật tiêm phụ thuộc (nhiều hơn về điều này sau).
Thay đổi DOM thủ công so với liên kết dữ liệu
Trong jQuery, bạn thực hiện tất cả các thay đổi DOM của mình bằng tay. Bạn xây dựng các phần tử DOM mới theo chương trình. Nếu bạn có một mảng JSON và bạn muốn đặt nó vào DOM, bạn phải viết một hàm để tạo HTML và chèn nó vào.
Trong AngularJS bạn cũng có thể làm điều này, nhưng bạn được khuyến khích sử dụng ràng buộc dữ liệu. Thay đổi mô hình của bạn và vì DOM được liên kết với nó thông qua một mẫu mà DOM của bạn sẽ tự động cập nhật, không cần can thiệp.
Vì liên kết dữ liệu được thực hiện từ mẫu, sử dụng thuộc tính hoặc cú pháp dấu ngoặc nhọn, nên việc này rất dễ thực hiện. Có rất ít chi phí nhận thức liên quan đến nó vì vậy bạn sẽ thấy mình làm việc đó mọi lúc.
<input ng-model="user.name" />
Liên kết các yếu tố đầu vào $scope.user.name
. Cập nhật đầu vào sẽ cập nhật giá trị trong phạm vi hiện tại của bạn và ngược lại.
Tương tự như vậy:
<p>
{{user.name}}
</p>
sẽ xuất tên người dùng trong một đoạn văn. Đó là một ràng buộc trực tiếp, vì vậy nếu $scope.user.name
giá trị được cập nhật, mẫu cũng sẽ cập nhật.
Ajax mọi lúc
Trong jQuery, việc thực hiện một cuộc gọi Ajax khá đơn giản, nhưng đây vẫn là điều bạn có thể nghĩ hai lần. Có thêm sự phức tạp để suy nghĩ và một đoạn kịch bản hợp lý để duy trì.
Trong AngularJS, Ajax là giải pháp đi đến mặc định của bạn và nó xảy ra mọi lúc, hầu như bạn không nhận ra. Bạn có thể bao gồm các mẫu với ng-gộp. Bạn có thể áp dụng một mẫu với chỉ thị tùy chỉnh đơn giản nhất. Bạn có thể gói một cuộc gọi Ajax trong một dịch vụ và tạo cho mình một dịch vụ GitHub hoặc dịch vụ Flickr mà bạn có thể truy cập một cách dễ dàng đáng kinh ngạc.
Đối tượng dịch vụ và chức năng trợ giúp
Trong jQuery, nếu chúng ta muốn thực hiện một nhiệm vụ không liên quan nhỏ như lấy nguồn cấp dữ liệu từ API, chúng ta có thể viết một hàm nhỏ để thực hiện điều đó trong phần đóng của chúng ta. Đó là một giải pháp hợp lệ, nhưng nếu chúng ta muốn truy cập nguồn cấp dữ liệu đó thường xuyên thì sao? Điều gì xảy ra nếu chúng ta muốn sử dụng lại mã đó trong một ứng dụng khác?
AngularJS cung cấp cho chúng tôi các đối tượng dịch vụ.
Dịch vụ là các đối tượng đơn giản có chứa các chức năng và dữ liệu. Họ luôn là những người độc thân, có nghĩa là không bao giờ có thể có nhiều hơn một trong số họ. Giả sử chúng tôi muốn truy cập API Stack Overflow, chúng tôi có thể viết một StackOverflowService
định nghĩa các phương thức để làm như vậy.
Hãy nói rằng chúng tôi có một giỏ hàng. Chúng tôi có thể xác định một ShoppingCartService duy trì giỏ hàng của chúng tôi và chứa các phương thức để thêm và xóa các mục. Bởi vì dịch vụ là một singleton và được chia sẻ bởi tất cả các thành phần khác, bất kỳ đối tượng nào cần có thể ghi vào giỏ hàng và lấy dữ liệu từ nó. Nó luôn luôn là cùng một giỏ hàng.
Các đối tượng dịch vụ là các thành phần AngularJS độc lập mà chúng ta có thể sử dụng và tái sử dụng khi chúng ta thấy phù hợp. Chúng là các đối tượng JSON đơn giản chứa các hàm và Dữ liệu. Chúng luôn là các singletons, vì vậy nếu bạn lưu trữ dữ liệu trên một dịch vụ ở một nơi, bạn có thể lấy dữ liệu đó ra một nơi khác chỉ bằng cách yêu cầu cùng một dịch vụ.
Tiêm phụ thuộc (DI) so với Instatiation - còn gọi là khử spaghettization
AngularJS quản lý các phụ thuộc của bạn cho bạn. Nếu bạn muốn một đối tượng, chỉ cần tham khảo nó và AngularJS sẽ lấy nó cho bạn.
Cho đến khi bạn bắt đầu sử dụng cái này, thật khó để giải thích thời gian khổng lồ này là gì. Không có gì giống như AngularJS DI tồn tại trong jQuery.
DI có nghĩa là thay vì viết ứng dụng của bạn và nối nó với nhau, thay vào đó bạn xác định một thư viện các thành phần, mỗi thành phần được xác định bởi một chuỗi.
Giả sử tôi có một thành phần gọi là 'FlickrService', định nghĩa các phương thức để lấy nguồn cấp JSON từ Flickr. Bây giờ, nếu tôi muốn viết một bộ điều khiển có thể truy cập Flickr, tôi chỉ cần tham khảo 'FlickrService' theo tên khi tôi khai báo bộ điều khiển. AngularJS sẽ đảm nhiệm việc khởi tạo thành phần và cung cấp nó cho bộ điều khiển của tôi.
Ví dụ: ở đây tôi định nghĩa một dịch vụ:
myApp.service('FlickrService', function() {
return {
getFeed: function() { // do something here }
}
});
Bây giờ khi tôi muốn sử dụng dịch vụ đó, tôi chỉ cần gọi nó bằng tên như thế này:
myApp.controller('myController', ['FlickrService', function(FlickrService) {
FlickrService.getFeed()
}]);
AngularJS sẽ nhận ra rằng một đối tượng FlickrService là cần thiết để khởi tạo bộ điều khiển và sẽ cung cấp một đối tượng cho chúng ta.
Điều này làm cho việc kết nối mọi thứ với nhau rất dễ dàng và khá nhiều loại bỏ mọi xu hướng phát triển. Chúng tôi có một danh sách các thành phần phẳng và AngularJS trao chúng cho chúng tôi từng cái một và khi chúng tôi cần chúng.
Kiến trúc mô đun dịch vụ
jQuery nói rất ít về cách bạn nên tổ chức mã của mình. AngularJS có ý kiến.
AngularJS cung cấp cho bạn các mô-đun để bạn có thể đặt mã của mình. Ví dụ: nếu bạn đang viết tập lệnh nói chuyện với Flickr, bạn có thể muốn tạo mô-đun Flickr để bọc tất cả các chức năng liên quan đến Flickr của mình. Các mô-đun có thể bao gồm các mô-đun khác (DI). Ứng dụng chính của bạn thường là một mô-đun và điều này sẽ bao gồm tất cả các mô-đun khác mà ứng dụng của bạn sẽ phụ thuộc vào.
Bạn có thể sử dụng lại mã đơn giản, nếu bạn muốn viết một ứng dụng khác dựa trên Flickr, bạn chỉ cần bao gồm mô-đun Flickr và voila, bạn có quyền truy cập vào tất cả các chức năng liên quan đến Flickr trong ứng dụng mới của mình.
Các mô-đun chứa các thành phần AngularJS. Khi chúng tôi bao gồm một mô-đun, tất cả các thành phần trong mô-đun đó sẽ có sẵn cho chúng tôi dưới dạng một danh sách đơn giản được xác định bởi các chuỗi duy nhất của chúng . Sau đó chúng ta có thể tiêm các thành phần đó vào nhau bằng cơ chế tiêm phụ thuộc của AngularJS.
Tóm lại
AngularJS và jQuery không phải là kẻ thù. Có thể sử dụng jQuery trong AngularJS rất độc đáo. Nếu bạn đang sử dụng AngularJS tốt (mẫu, liên kết dữ liệu, $ phạm vi, chỉ thị, vv), bạn sẽ tìm thấy bạn cần một nhiều ít jQuery hơn bạn khác có thể yêu cầu.
Điều chính để nhận ra là mẫu của bạn điều khiển ứng dụng của bạn. Ngừng cố gắng viết các plugin lớn làm mọi thứ. Thay vào đó hãy viết các chỉ thị nhỏ làm một việc, sau đó viết một mẫu đơn giản để nối chúng lại với nhau.
Nghĩ ít hơn về JavaScript không phô trương và thay vào đó hãy nghĩ về các phần mở rộng HTML.
Cuốn sách nhỏ của tôi
Tôi đã rất hào hứng với AngularJS, tôi đã viết một cuốn sách ngắn về nó mà bạn rất hoan nghênh khi đọc trực tuyến http://nicholasjohnson.com/angular-book/ . Tôi hy vọng nó hữu ích.