2013-02-12 20 views
15

Tôi mới tham gia AngularJS và đang cố gắng xây dựng cho mình một ứng dụng nhỏ đơn giản. Tôi có dữ liệu JSON cho ứng dụng đang được tìm nạp với $resource và dữ liệu này phải giống nhau trên nhiều chế độ xem/tuyến đường. Tuy nhiên, khi tôi đi đến một tuyến đường mới, dữ liệu JSON (được lưu trữ dưới dạng $scope.data) không còn có sẵn cho chế độ xem mới nữa. Tôi có thể làm gì để chuyển dữ liệu này sang chế độ xem mới và không yêu cầu tìm nạp khác? (Ứng dụng danh mục điện thoại hướng dẫn tìm nạp lại dữ liệu này mỗi lần từ những gì tôi có thể biết).Làm thế nào để bảo toàn dữ liệu thông qua định tuyến AngularJS?

Từ những gì tôi hiểu, $rootScope có thể làm điều này nhưng dường như không được tán thành. Tôi xin lỗi nếu điều này không có ý nghĩa nhiều; Tôi đang lặn rất sâu ở đây.

+0

thể trùng lặp của [Angularjs, đi qua phạm vi giữa các tuyến] (http://stackoverflow.com/questions/13882077/angularjs-passing-scope-between-routes) –

Trả lời

17

Sử dụng dịch vụ để lưu trữ dữ liệu. Tiêm dịch vụ đó vào mỗi bộ điều khiển cần truy cập vào dữ liệu này. Mỗi lần một bộ điều khiển được tạo và thực thi (vì bạn chuyển sang một chế độ xem/tuyến đường khác), nó có thể yêu cầu dịch vụ cho dữ liệu. Nếu dịch vụ chưa có dữ liệu, nó có thể đưa ra yêu cầu tới máy chủ và trả lại lời hứa cho bộ điều khiển (xem bên dưới để biết cách thực hiện điều đó). Nếu dịch vụ có dữ liệu, nó có thể trả về bộ điều khiển ngay lập tức.

Xem thêm Processing $http response in service

Lưu ý rằng dịch vụ là độc thân, không giống như các bộ điều khiển.

Một biến thể khác: khi dịch vụ được tạo, nó có thể tự tìm nạp dữ liệu và sau đó lưu trữ nó để sử dụng sau này. Bộ điều khiển có thể hơn các thuộc tính hoặc chức năng của đồng hồ $ trên dịch vụ. Đối với một ví dụ về cách tiếp cận này thấy How do I store a current user context in Angular?

+0

Cảm ơn đã triệt để phản ứng! Thật không may, tôi vẫn không thể làm cho nó hoạt động (tôi đang thử phương pháp đầu tiên, điều này có vẻ tự nhiên hơn đối với tôi). Tôi có '$ routeProvider' định nghĩa hai tuyến, bây giờ mỗi ánh xạ tới cùng một bộ điều khiển. Trình điều khiển gọi 'service.async(). Sau đó (...)' và phương thức 'async' của dịch vụ trả về lời hứa được xác định bởi' http.get ('/ data.json') '. Và mỗi khi tôi điều hướng trong ứng dụng sang một tuyến đường mới, một yêu cầu HTTP mới đến 'data.json' được tạo. Bất kỳ suy nghĩ sẽ được đánh giá rất cao. – JacobEvelyn

+0

@ConstableJoe, thử chuyển [$ http caching] (http://stackoverflow.com/questions/14117653/how-to-cache-an-http-get-service-in-angularjs) vào. Tôi nên nói rằng trong câu trả lời của tôi. –

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