Làm cách nào để lưu trữ dữ liệu trong bộ nhớ cục bộ bằng Angularjs?


177

Hiện tại tôi đang sử dụng một dịch vụ để thực hiện một hành động, cụ thể là lấy dữ liệu từ máy chủ và sau đó lưu trữ dữ liệu trên chính máy chủ đó.

Thay vì điều này, tôi muốn đưa dữ liệu vào bộ nhớ cục bộ thay vì lưu trữ trên máy chủ. Làm thế nào để tôi làm điều này?

Câu trả lời:


125

đây là một chút mã của tôi lưu trữ và truy xuất vào bộ nhớ cục bộ. tôi sử dụng các sự kiện phát sóng để lưu và khôi phục các giá trị trong mô hình.

app.factory('userService', ['$rootScope', function ($rootScope) {

    var service = {

        model: {
            name: '',
            email: ''
        },

        SaveState: function () {
            sessionStorage.userService = angular.toJson(service.model);
        },

        RestoreState: function () {
            service.model = angular.fromJson(sessionStorage.userService);
        }
    }

    $rootScope.$on("savestate", service.SaveState);
    $rootScope.$on("restorestate", service.RestoreState);

    return service;
}]);

9
bạn sử dụng cái này như thế nào?
chovy

4
chovy, đây là ví dụ góc cạnh đầy đủ stackoverflow.com/questions/12940974/ trộm
Anton

290
Đối với hồ sơ sessionStoragelocalStorage
Mars Robertson

4
bạn có thể sử dụng $ window.sessionStorage để bạn có thể tiêm nó trong các thử nghiệm của mình
Guillaume Massé


105

Nếu bạn sử dụng $window.localStorage.setItem(key,value)để lưu trữ, $window.localStorage.getItem(key)truy xuất và $window.localStorage.removeItem(key)xóa, thì bạn có thể truy cập các giá trị trong bất kỳ trang nào.

Bạn phải chuyển $windowdịch vụ đến bộ điều khiển. Mặc dù trong JavaScript, windowđối tượng có sẵn trên toàn cầu.

Bằng cách sử dụng $window.localStorage.xxXX()người dùng có quyền kiểm soát localStoragegiá trị. Kích thước của dữ liệu phụ thuộc vào trình duyệt. Nếu bạn chỉ sử dụng $localStoragethì giá trị vẫn duy trì miễn là bạn sử dụng window.location.href để điều hướng đến trang khác và nếu bạn sử dụng <a href="location"></a>để điều hướng đến trang khác thì $localStoragegiá trị của bạn sẽ bị mất trong trang tiếp theo.


12
Giải pháp này phù hợp với tôi nhất. Tại sao nên sử dụng trình cắm hoặc mô-đun khi bạn có thể dễ dàng truy cập thẳng vào DOM? Vì tôi muốn lưu trữ các đối tượng thay vì các chuỗi đơn giản, tôi chỉ sử dụng angular.toJson () kết hợp với setItem () và angular.fromJson () kết hợp với getItem (). Dễ dàng. Yêu nó.
Brett Donald

5
Đây là câu trả lời tốt nhất. Không cần phụ thuộc bên ngoài.
Kasper Zi phóngek

2
Đồng ý, đây là giải pháp đơn giản nhất để quản lý cặp khóa / giá trị
jolySoft

Khóa trong dòng là gì: $ window.localStorage.setItem (khóa, giá trị). Nó được khai báo và đặt ở đâu?

Chìa khóa là bất cứ điều gì bạn muốn nó là giá trị ID duy nhất đó. Vì vậy, BẠN xác định khóa khi bạn lưu trữ một cái gì đó và đó cũng chính là thứ bạn sử dụng để lấy nó.
dùng441521

56

Đối với lưu trữ cục bộ, có một mô-đun để xem url bên dưới:

https://github.com/grevory/angular-local-st Storage

và liên kết khác cho bộ nhớ cục bộ HTML5 và angularJs

http://www.amitavroy.com/justread/content/articles/html5-local-st Storage-with-angular-js /


5
Các câu trả lời chỉ liên kết không được khuyến khích trên StackOverflow vì các liên kết bên ngoài có xu hướng chết.
Hubert Grzeskowiak

50

Sử dụng ngStoragecho tất cả các nhu cầu lưu trữ cục bộ AngularJS của bạn. Xin lưu ý rằng đây KHÔNG phải là một phần nguyên gốc của khung công tác Angular JS.

ngStorage chứa hai dịch vụ $localStorage$sessionStorage

angular.module('app', [
   'ngStorage'
]).controller('Ctrl', function(
    $scope,
    $localStorage,
    $sessionStorage
){});

Kiểm tra bản demo


24
đáng nói đó không phải là một phần của góc cạnh và nên được nhập dưới dạng tệp bổ sung
Serge

1
liên kết đến mô-đun npm?
chovy


2

Bạn có thể dùng localStorage cho mục đích này.

Các bước:

  1. thêm ngStorage.min.js trong tệp của bạn
  2. thêm phụ thuộc ngStorage trong mô-đun của bạn
  3. thêm mô đun $ localStorage trong bộ điều khiển của bạn
  4. sử dụng $ localStorage.key = value

2

Tôi là tác giả (nhưng khác) dịch vụ lưu trữ html5 góc. Tôi muốn giữ các bản cập nhật tự động có thể thực hiện bằng cách ngStorage, nhưng làm cho các chu trình tiêu hóa dễ dự đoán hơn / trực quan hơn (ít nhất là đối với tôi), thêm các sự kiện để xử lý khi yêu cầu tải lại trạng thái và cũng thêm lưu trữ phiên chia sẻ giữa các tab. Tôi đã lập mô hình API sau $resourcevà gọi nó angular-stored-object. Nó có thể được sử dụng như sau:

  angular
    .module('auth', ['yaacovCR.storedObject']);

  angular
    .module('auth')
    .factory('session', session);

  function session(ycr$StoredObject) {
    return new ycr$StoredObject('session');
  }

API ở đây .

Repo ở đây .

Hy vọng nó sẽ giúp được ai đó!


Các cử tri xuống sẽ quan tâm để giải thích phiếu bầu của họ, xin vui lòng?
DerMike

1
Bây giờ tôi sử dụng đối tượng được lưu trữ góc trong dự án của mình và nó thực sự dễ sử dụng. Hơn nữa, Yaacov thực sự nhanh chóng trong việc trả lời câu hỏi. Vì vậy, tôi cũng khuyên bạn nên nó!
JR Utily

2

Thực hiện theo các bước để lưu trữ dữ liệu trong Angular - lưu trữ cục bộ:

  1. Thêm 'ngStorage.js' trong thư mục của bạn.
  2. Tiêm 'ngStorage' trong angular.module của bạn

        eg: angular.module("app", [ 'ngStorage']);
  3. Thêm $localStoragevào chức năng app.controll của bạn

4. Bạn có thể sử dụng $localStoragebên trong bộ điều khiển của bạn

Eg: $localstorage.login= true;

Ở trên sẽ lưu trữ cục bộ trong ứng dụng trình duyệt của bạn


1

Tùy thuộc vào nhu cầu của bạn, như nếu bạn muốn cho phép dữ liệu cuối cùng hết hạn hoặc đặt giới hạn về số lượng bản ghi sẽ lưu trữ, bạn cũng có thể xem https://github.com/jmdobry/angular-cache cho phép bạn xác định nếu bộ đệm nằm trong bộ nhớ, localStorage hoặc sessionStorage.


1

Chúng ta nên sử dụng tập lệnh của bên thứ ba cho cái gọi là ngStorage ở đây là một ví dụ về cách sử dụng. Nó cập nhật bộ lưu trữ cục bộ với sự thay đổi trong phạm vi / chế độ xem.

    <!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <!-- CDN Link -->
    <!--https://cdnjs.cloudflare.com/ajax/libs/ngStorage/0.3.6/ngStorage.min.js-->
    <script src="angular.min.js"></script>
    <script src="ngStorage.min.js"></script>
    <script>
        var app = angular.module('app', ['ngStorage']);
        app.factory("myfactory", function() {
            return {
                data: ["ram", "shyam"]
            };
        })
        app.controller('Ctrl', function($scope, $localStorage, $sessionStorage, myfactory) {

            $scope.abcd = $localStorage; //Pass $localStorage (or $sessionStorage) by reference to a hook under $scope
            // Delete from Local Storage
            //delete $scope.abcd.counter;
            // delete $localStorage.counter;
            // $localStorage.$reset(); // clear the localstorage
            /* $localStorage.$reset({
                 counter: 42   // reset with default value
             });*/
            // $scope.abcd.mydata=myfactory.data;
        });
    </script>
</head>

<body ng-app="app" ng-controller="Ctrl">

    <button ng-click="abcd.counter = abcd.counter + 1">{{abcd.counter}}</button>
</body>

</html>
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.