2013-03-14 26 views
57

Có gì đó trong tài liệu AngularJS mà tôi dường như không thể tìm thấy hoặc có thể tôi đang thiếu.AngularJS Tự động đồng bộ dữ liệu giữa máy chủ và máy khách

Tôi đang tạo một ứng dụng web với NodeJS và Express ở phía sau và tôi đang cố gắng hiểu cách nó có thể tương tác với Angular trong giao diện người dùng. Đặc biệt, tôi sẽ có một API JSON cho Angular để lấy thông tin từ đó. Tôi muốn giao diện người dùng luôn được cập nhật.

Câu hỏi của tôi là:

  • Liệu hai chiều các dữ liệu tính năng ràng buộc nghĩa kiễu góc (nguồn $ hoặc $ http) tự động tải dữ liệu từ máy chủ mỗi n giây?
  • Ứng dụng có tự nhiên sử dụng bỏ phiếu dài, bỏ phiếu ngắn hoặc websockets không?
  • Bạn có cần JQuery để đồng bộ hóa máy khách-máy khách hoặc mọi thứ có thể được thực hiện với Góc không?
  • Bạn có phải thêm mã phụ để thực hiện hành vi này xảy ra không? Tôi có cần sử dụng $ timeout không?

Mỗi ví dụ tôi tìm thấy liên quan đến việc khách hàng tìm nạp dữ liệu một lần. Không đồng bộ hóa dữ liệu với máy chủ.

+3

Góc không quản lý đồng bộ hóa máy khách/máy chủ. Nếu bạn muốn thăm dò ý kiến ​​kết thúc trở lại một cách thường xuyên, bạn cần phải viết rằng chính mình. Bạn có thể sử dụng $ timeout để thuận tiện (vì vậy các cập nhật xảy ra bên trong vòng lặp digest), nhưng bạn phải thực hiện phạm vi cập nhật trong mã của riêng bạn. – Jollymorphic

Trả lời

81

Ràng buộc hai chiều trong AngularJS đề cập đến mô hình dữ liệu (phạm vi $) và chế độ xem của bạn (chỉ thị). Ví dụ: nếu dữ liệu thay đổi trong mô hình của bạn, chế độ xem sẽ tự động cập nhật. Tương tự, nếu người dùng sửa đổi dữ liệu trong chế độ xem, mô hình của bạn sẽ tự động cập nhật.

Tương tác với dịch vụ web được thực hiện thông qua mô-đun dịch vụ $ http. Vì vậy, để có được dữ liệu từ API RESTful của bạn, bạn sẽ làm điều gì đó như:

$http.get('/someUrl').success(successCallback); 

tài liệu đầy đủ với $ http là trên AngularJS site. Tôi nghĩ bạn sẽ thấy nó rất giống với các phương thức $ .ajax của jQuery. Bạn có thể dễ dàng thiết lập $ http.get() để bỏ phiếu ngắn với dịch vụ timeout $ của angular (về cơ bản là một trình bao bọc cho setTimeout).

Để cập nhật thời gian thực giữa máy khách AngularJS và API máy chủ, bạn có thể muốn xem xét Socket.io. Nó sử dụng node.js để tạo kết nối ổ cắm trực tiếp giữa trình duyệt và máy chủ, đồng thời có cơ chế dự phòng (flash, bỏ phiếu dài) cho các trình duyệt cũ hơn. Có một dự án soạn sẵn trên GitHub đó chứng tỏ làm thế nào để thiết lập AngularJS với Socket.io: https://github.com/btford/angular-socket-io-seed

Để Tóm tắt:

Liệu hai chiều các dữ liệu tính năng ràng buộc nghĩa kiễu góc (nguồn $ hoặc $ http) tự động tìm nạp dữ liệu từ máy chủ sau mỗi giây?

Không, liên kết hai chiều nằm giữa các mô hình Góc và chế độ xem.

Tự nhiên sử dụng bỏ phiếu dài, bỏ phiếu ngắn hoặc websockets?

Góc không bao gồm bất kỳ điều này theo mặc định. Bạn phải tự thiết lập chúng.

Bạn có cần JQuery để đồng bộ hóa máy khách-khách hàng hay mọi thứ có thể được thực hiện với Góc không?

$ http là, theo nghĩa rộng, tương đương với góc của jQuery $ .ajax

Bạn phải bổ sung thêm mã để thực hiện hành vi này xảy ra? Tôi có cần sử dụng $ timeout không?

Sử dụng $ timeout để bỏ phiếu ngắn hoặc cuộn giải pháp của riêng bạn để bỏ phiếu dài và/hoặc websockets (xem dự án angular-socket-io-seed).

+2

Rất hữu ích - có thể đáng nói đến là "mô hình" trong trường hợp này là phía khách hàng. Điều này không rõ ràng với tôi ở phía trước. Bạn có biết nếu Angular đang có kế hoạch làm socket.io hoặc một số cách khác để nói chuyện với các API mặc định trong thư viện? Tôi đã rất ngạc nhiên khi phần này không được đề cập trong tài liệu của họ. Cảm ơn! –

+0

Có lẽ bạn có thể tìm thêm thông tin chi tiết về cách triển khai khái niệm này trong dự án này. Mặc dù, nó dựa trên KO nhưng bạn có thể nhận được ý tưởng: https://github.com/imrefazekas/knockout.sync.js – Qorbani

+0

Bạn nên xem xét Omnibinder - hiện là một mẫu thử nghiệm, nhưng đang tìm cách xử lý đồng bộ hóa mô hình máy khách-máy khách. – Bringer128

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