Có phải AngularJS chỉ dành cho các ứng dụng một trang (SPA)?


201

Chúng tôi đang xem xét các tùy chọn để xây dựng mặt trước của ứng dụng mà chúng tôi đang tạo và đang cố gắng đánh giá một công cụ sẽ hoạt động cho chúng tôi và cung cấp cho chúng tôi nền tảng tốt nhất để tiến lên.

Đây là một dự án Node.js. Kế hoạch ban đầu của chúng tôi là sử dụng Express và đi theo tuyến đường đó, nhưng chúng tôi đã quyết định rằng trước khi chúng tôi khởi động giai đoạn này, tốt nhất nên xem lại những gì ở ngoài đó. Ứng dụng của chúng tôi có một số lĩnh vực mà chúng tôi không tin là phù hợp với mô hình một trang ở chỗ chúng có liên quan từ góc độ ứng dụng, nhưng không phải từ góc nhìn.

Chúng tôi đã thấy một vài khung công tác mà chúng tôi có thể sử dụng để xây dựng ứng dụng khách như Backbone.js , Meteor , v.v. và cả AngularJS.

Đây có thể là một câu hỏi khá rõ ràng, nhưng dường như chúng ta không thể giải mã được nếu AngularJS hoàn toàn dành cho ứng dụng một trang hoặc nó có thể được sử dụng cho các ứng dụng nhiều trang như Express chẳng hạn.


CẬP NHẬT 17 tháng 7 năm 2013 Chỉ để giữ mọi người trong vòng lặp, tôi sẽ cập nhật câu hỏi này khi chúng tôi thực hiện quy trình. Chúng tôi sẽ xây dựng mọi thứ cùng nhau bây giờ, và chúng tôi sẽ xem điều đó thực hiện tốt như thế nào. Chúng tôi đã liên hệ với một số người có trình độ với AngularJS nhiều hơn chúng tôi và đặt ra câu hỏi liên quan đến việc chia nhỏ các ứng dụng lớn hơn chia sẻ bối cảnh, nhưng có thể quá lớn khi làm việc trên một trang.

Sự đồng thuận là chúng tôi có thể phục vụ nhiều trang tĩnh và tạo các ứng dụng AngularJS chỉ hoạt động với các trang đó, tạo hiệu quả một bộ sưu tập SPA và liên kết các ứng dụng đó với nhau bằng liên kết chuẩn. Bây giờ trường hợp sử dụng của chúng tôi rất cụ thể vì giải pháp của chúng tôi có một số ứng dụng và như tôi đã nói, chúng tôi sẽ thử cơ sở mã đơn trước tiên và tối ưu hóa từ đó.

CẬP NHẬT 18 tháng 6 năm 2016 Dự án rơi xuống một vách đá, vì vậy chúng tôi không bao giờ hoàn thành được quá nhiều việc. Chúng tôi đã chọn lại nó gần đây, nhưng không còn sử dụng góc cạnh và đang sử dụng React thay thế. Chúng tôi vẫn đang sử dụng kiến ​​trúc được phác thảo trong bản cập nhật trước đó, nơi chúng tôi sử dụng các ứng dụng express và self chứa các ứng dụng, vì vậy, ví dụ, chúng tôi có một /chattuyến đường nhanh phục vụ ứng dụng trò chuyện React của chúng tôi, chúng tôi có một tuyến đường khác /projectsphục vụ ứng dụng dự án và Sớm. Cách chúng ta nhìn vào mỗi ứng dụng là một gốc tổng hợp về bộ tính năng của nó, nó cần có khả năng độc lập để nó được coi là một ứng dụng. Về mặt kỹ thuật, tất cả các thông tin đều nằm ngoài đó, nó chỉ là sự thể hiện cơ bản và bất kỳ hương vị nào của sự tốt đẹp của ứng dụng khách hàng mà bạn muốn sử dụng.


5
Vậy nó sẽ đi như thế nào? Tôi đang trong quá trình cố gắng tìm cách chuyển ứng dụng ASP.NET hơn 50 trang sang ứng dụng HTML + Javascript + REST thuần túy và tôi thực sự không hiểu làm thế nào nó hoạt động như một SPA.
Greg

1
Chúng tôi phải chuyển sang thứ khác. Từ các cuộc thảo luận chúng tôi đã và sẽ có một lần nữa khi điều này khởi động trở lại, đó là và SPA có thể là một răng cưa rất tập trung trong một cỗ máy lớn hơn nhiều. Vì vậy, dịch phiên bản của chúng tôi sang ví dụ của bạn (chúng tôi đã sử dụng nút thuần với express) nếu bạn muốn ở lại một ngăn xếp quen thuộc (.Net), bạn có thể sử dụng MVC làm giàn giáo của mình và sử dụng góc trong các khung nhìn để thêm nội dung động (mỗi tính năng) . trừ khi bạn có thể ngưng tụ ứng dụng của mình xuống, việc triển khai 50 trang logic vào một trang có thể bị sặc.
Modika

1
Điều đó làm cho mỗi phần (ví dụ: người dùng, tin tức, sản phẩm, v.v.) trở thành một SPA theo cách riêng của mình, nhưng gọi chung là chúng tạo thành ứng dụng của bạn.
Modika

1
Tuyệt vời cảm ơn bạn. Có bất kỳ mã hóa cụ thể nào phải được thực hiện để gắn các SPA khác nhau lại với nhau không? Hay chỉ là liên kết thông thường?
Greg

1
@Greg, từ hiểu biết hạn chế của chúng tôi cho đến nay, vì về cơ bản chúng là các ứng dụng trong liên kết tiêu chuẩn đúng của chúng sẽ hoạt động, rõ ràng có lẽ nó sẽ không đơn giản vì điều đó và một số hình thức kiên trì (cookie, lưu trữ cục bộ) sẽ cần được duy trì chia sẻ thông tin như có thể và danh tính hoặc hồ sơ nếu ứng dụng đứng sau một số hình thức Đăng nhập. Các ứng dụng của chúng tôi sẽ được liên kết chặt chẽ với API của chúng tôi và vì chúng tôi đang xây dựng một ứng dụng đáng tin cậy, chúng tôi đang sử dụng oauth để bảo vệ từng yêu cầu, tôi nghĩ Trello làm điều gì đó tương tự, nhưng tôi có thể sai.
Modika

Câu trả lời:


216

Không có gì. Bạn có thể sử dụng Angular để xây dựng nhiều ứng dụng. Định tuyến phía máy khách chỉ là một phần nhỏ trong đó.

Bạn có một danh sách lớn các tính năng sẽ có lợi cho bạn ngoài việc định tuyến phía máy khách:

  • ràng buộc hai chiều
  • khuôn mẫu
  • định dạng tiền tệ
  • số nhiều
  • điều khiển tái sử dụng
  • Xử lý api RESTful
  • Xử lý AJAX
  • mô đun hóa
  • tiêm phụ thuộc

Thật điên rồ khi nghĩ rằng tất cả những thứ đó "chỉ có thể được sử dụng trong một ứng dụng trang". Tất nhiên là không .. điều đó giống như nói "Jquery chỉ dành cho các dự án có hoạt hình".

Nếu nó phù hợp với dự án của bạn, sử dụng nó.


42
Một điểm khác cần đề cập là Angular thậm chí không cần được sử dụng cho các trang đầy đủ - nó có thể được tích hợp vào một hệ thống hiện có để xây dựng các thành phần, tức là một widget hoặc plugin phức tạp bên trong một ứng dụng cũ.
Alex Osborn

2
@ Thịt, cảm ơn bạn đã trả lời, nó có ý nghĩa nhưng điều chúng tôi đang cố gắng tìm là "cách thức" chúng tôi sử dụng nó để xây dựng các ứng dụng nhiều trang, đó là lý do tại sao câu hỏi được đăng, đó thực sự là một câu hỏi khác vì vậy câu trả lời của bạn đã được được chấp nhận nhưng chẳng hạn, chúng ta có thể sử dụng angular.js với express.js hay đại loại như thế chỉ là lãng phí thời gian và quá phức tạp.
Modika

Angular với Express là gần như lý tưởng! Thật sự rất dễ dàng để tạo API RESTful với Express mà bạn có thể sử dụng từ (các) ứng dụng Angular của mình. Google NodeJS Express RESTful API và các dịch vụ $ resource và $ http của Angular. Sau đó, chỉ cần bắt đầu tạo mẫu và chơi với nó. Tôi nghĩ rằng bạn có thể thấy bạn đang suy nghĩ quá mức / lo lắng quá nhiều về "CÁCH" một khi bạn thấy họ làm việc độc đáo như thế nào.
Ben Lesh

@ Thịt, xin lỗi vì về muộn. Chúng tôi đã có API REST / Hypermedia được xây dựng bằng Restify, tôi đoán rằng chúng tôi cần tìm một cách gọn gàng để liên kết các "ứng dụng" riêng biệt được tạo ra bằng cách nào đó, sẽ xem xét vấn đề này và có thể cập nhật câu hỏi tại một số điểm.
Modika

@Modika bạn có thể tìm thấy bất kỳ tài nguyên tốt nào hoặc có bất kỳ thông tin chi tiết tốt nào cho các ứng dụng nhiều trang không?
DRE

16

Lúc đầu tôi cũng vật lộn với "cách" với Angular. Rồi một ngày, tôi chợt nhận ra: "Đó là VẪN javascript". Có một loạt các ví dụ về sự khởi đầu của Angular (một trong những mục yêu thích của tôi cùng với cuốn sách https://github.com/angular-app/angular-app ). Điều lớn nhất cần nhớ là tải trong các tệp js giống như bạn làm trong bất kỳ dự án nào khác. Tất cả những gì bạn phải làm là đảm bảo các trang khác nhau tham chiếu đúng đối tượng Angular (bộ điều khiển, chế độ xem, v.v.) và bạn tắt và chạy. Tôi hy vọng điều này có ý nghĩa, nhưng câu trả lời rất đơn giản tôi đã bỏ qua nó.


6

Có lẽ kinh nghiệm của tôi sẽ hữu ích cho ai đó. Chúng tôi chia dự án của chúng tôi một cách hợp lý. Một SPA chúng tôi sử dụng cho nguồn cấp dữ liệu, một số khác để làm việc với bản đồ, một số khác để chỉnh sửa hồ sơ người dùng, v.v. Ví dụ: chúng tôi có ba ứng dụng: nguồn cấp dữ liệu, người dùng và bản đồ. Tôi sử dụng nó trong các url riêng biệt, như thế này:

https://host/feed/#/top/
https://host/user/#/edit/1/
https://host/map/favorites/#/add/

Mỗi ứng dụng này có ánh xạ định tuyến cục bộ giữa các trạng thái trong ứng dụng. Tôi nghĩ rằng đó là một thực tiễn tốt vì mỗi ứng dụng chỉ hoạt động với bối cảnh và phụ thuộc tải riêng mà nó thực sự cần. Ngoài ra, nó thực hành rất tốt cho các quá trình gỡ lỗi và tích hợp.

Thật vậy, bạn có thể dễ dàng tạo ra một hỗn hợp các ứng dụng SPA, ví dụ: nguồn cấp dữ liệu sẽ là url với ứng dụng angularjs, ứng dụng người dùng với Reacjs và ánh xạ tới ứng dụng backbone.js.

Trả lời câu hỏi của bạn:

Angular không chỉ dành cho các SPA, Angular chơi tốt và nhanh cho các ứng dụng SPA, nhưng không ai bận tâm để xây dựng ứng dụng MPA của một loạt các ứng dụng SPA. Nhưng suy nghĩ về kiến ​​trúc url của bạn đừng quên về tính sẵn có của ứng dụng SEO.

Tôi cũng ủng hộ ý tưởng:

Sự khác biệt giữa một dự án và một ứng dụng là gì? Ứng dụng là một ứng dụng Web thực hiện một cái gì đó - ví dụ: hệ thống Weblog, cơ sở dữ liệu về hồ sơ công khai hoặc ứng dụng thăm dò ý kiến ​​đơn giản. Một dự án là một tập hợp các cấu hình và ứng dụng cho một trang web cụ thể. Một dự án có thể chứa nhiều ứng dụng. Một ứng dụng có thể trong nhiều dự án.


3

Nếu tất cả những gì bạn cần là một vài trang với cơ sở dữ liệu khách hàng, tôi sẽ sử dụng Không gian tên và gõ.

Knockout là tuyệt vời, đặc biệt nếu bạn cần khả năng tương thích ngược không phức tạp và có các trang khá thẳng về phía trước. Nếu bạn đang sử dụng các thành phần của bên thứ 3, các ràng buộc tùy chỉnh của Knockout rất đơn giản và dễ làm việc.

Không gian tên Javascript cho phép bạn giữ mã riêng biệt và có thể quản lý được.

var myCo = myCo || {};
myCo.page = {
    init: function(){ ... },
    ...
}

Và trong thẻ script sau khi các tập lệnh khác của bạn được tải

<script>
    myCo.init();
</script>

Điều quan trọng là, bạn sử dụng bất kỳ công cụ nào bạn muốn khi bạn cần. Cần databinding? Knockout (hoặc bất cứ điều gì bạn thích). Cần định tuyến? sammy.js (hoặc bất cứ điều gì bạn thích).

Mã khách hàng có thể đơn giản hoặc phức tạp như bạn muốn. Tôi đã thử tích hợp Angular vào một trang web rất phức tạp với khung độc quyền hiện có và đó là một cơn ác mộng. Angular là tuyệt vời nếu bạn bắt đầu mới, nhưng nó có một đường cong học tập và khóa bạn vào một quy trình làm việc rất chặt chẽ. Nếu bạn không tuân theo nó, mã của bạn có thể bị rối rất nhanh.


1

Tôi muốn nói Angular là quá mức cần thiết nếu bạn chỉ muốn phát triển một SPA. Chắc chắn, nếu bạn đã thoải mái phát triển với nó, hãy tiếp tục. Nhưng nếu bạn chưa quen với khuôn khổ và chỉ cần phát triển một SPA, tôi sẽ làm điều gì đó đơn giản hơn với một số đặc quyền riêng của nó. Tôi khuyên bạn nên xem xét Vue.js hoặc Aurelia.io .

Vue.js sử dụng liên kết dữ liệu hai chiều, MVVM, các thành phần có thể tái sử dụng, đơn giản và nhanh chóng để lấy, ít mã để viết, v.v. Nó kết hợp một số tính năng tốt nhất của Angular và React.

Aurelia.io , thật lòng mà nói, tôi không biết nhiều về nó. Nhưng tôi đã lén nhìn xung quanh và có vẻ như một sự thay thế đáng để xem xét, tương tự như ở trên.

Liên kết:
https://vuejs.org/
http://aurelia.io/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.