ฉันจะเก็บข้อมูลไว้ในที่จัดเก็บในตัวเครื่องโดยใช้ Angularjs ได้อย่างไร


177

ขณะนี้ฉันกำลังใช้บริการเพื่อดำเนินการคือเรียกข้อมูลจากเซิร์ฟเวอร์แล้วจัดเก็บข้อมูลบนเซิร์ฟเวอร์เอง

แทนที่จะเป็นเช่นนี้ฉันต้องการวางข้อมูลลงในที่จัดเก็บในตัวเครื่องแทนที่จะเก็บไว้ในเซิร์ฟเวอร์ ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


125

นี่เป็นรหัสเล็กน้อยของฉันที่จัดเก็บและดึงข้อมูลไปยังที่จัดเก็บในตัวเครื่อง ฉันใช้เหตุการณ์ออกอากาศเพื่อบันทึกและเรียกคืนค่าในรูปแบบ

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
คุณใช้สิ่งนี้อย่างไร
chovy

4
chovy นี่คือตัวอย่างเชิงมุมที่สมบูรณ์stackoverflow.com/questions/12940974/…
Anton

290
สำหรับบันทึกsessionStoragelocalStorage
Mars Robertson

4
คุณสามารถใช้ $ window.sessionStorage เพื่อให้คุณสามารถฉีดในการทดสอบของคุณ
Guillaume Massé


105

หากคุณใช้$window.localStorage.setItem(key,value)เพื่อจัดเก็บ$window.localStorage.getItem(key)เพื่อดึงและ$window.localStorage.removeItem(key)ลบจากนั้นคุณสามารถเข้าถึงค่าในหน้าใดก็ได้

คุณต้องผ่าน$windowบริการไปยังตัวควบคุม แม้ว่าใน JavaScript windowวัตถุจะสามารถใช้ได้ทั่วโลก

โดยใช้$window.localStorage.xxXX()ผู้ใช้มีการควบคุมlocalStorageค่า ขนาดของข้อมูลขึ้นอยู่กับเบราว์เซอร์ หากคุณใช้$localStorageค่าจะยังคงอยู่ตราบใดที่คุณใช้window.location.hrefเพื่อนำทางไปยังหน้าอื่นและหากคุณใช้<a href="location"></a>เพื่อนำทางไปยังหน้าอื่น$localStorageค่าของคุณจะหายไปในหน้าถัดไป


12
วิธีนี้เหมาะกับฉันที่สุด ทำไมต้องใช้ปลั๊กอินหรือโมดูลเมื่อคุณสามารถตรงไปที่ DOM ได้อย่างง่ายดาย? เนื่องจากฉันต้องการเก็บวัตถุมากกว่าสตริงธรรมดาฉันจึงใช้ angular.toJson () ร่วมกับ setItem () และ angular.fromJson () ร่วมกับ getItem () ง่าย. รักมัน
Brett Donald

5
นี่คือคำตอบที่ดีที่สุด ไม่จำเป็นต้องพึ่งพาภายนอก
Kasper Ziemianek

2
เห็นด้วยนี่เป็นวิธีที่ง่ายที่สุดสำหรับการจัดการคู่คีย์ / ค่า
jolySoft

กุญแจคืออะไรในบรรทัด: $ window.localStorage.setItem (key, value) มันตั้งอยู่ที่ไหนและประกาศ?

กุญแจสำคัญคือสิ่งที่คุณต้องการให้เป็นค่าที่ไม่ซ้ำกันของ ID ดังนั้นคุณจะต้องกำหนดกุญแจเมื่อคุณเก็บบางอย่างและนั่นคือสิ่งเดียวกันกับที่คุณใช้เพื่อเรียกคืน
user441521

56

สำหรับที่จัดเก็บในตัวเครื่องมีโมดูลสำหรับดูที่ด้านล่าง url:

https://github.com/grevory/angular-local-storage

และลิงก์อื่น ๆ สำหรับที่จัดเก็บในตัว HTML5 และ angularJs

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


5
คำตอบสำหรับลิงก์อย่างเดียวไม่แนะนำให้ใช้กับ StackOverflow เนื่องจากลิงก์ภายนอกมีแนวโน้มที่จะตาย
Hubert Grzeskowiak

50

ใช้ngStorageสำหรับความต้องการพื้นที่เก็บข้อมูลในเครื่องของคุณทั้งหมด โปรดทราบว่านี่ไม่ใช่ส่วนหนึ่งของ Angular JS framework

ngStorage มีสองบริการ$localStorageและ$sessionStorage

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

ตรวจสอบการสาธิต


24
มูลค่าการกล่าวขวัญที่ไม่ได้เป็นส่วนหนึ่งของเชิงมุมและควรนำเข้าเป็นไฟล์เพิ่มเติม
Serge

1
เชื่อมโยงไปยังโมดูล npm?
chovy


2

คุณสามารถใช้localStorageเพื่อวัตถุประสงค์

ขั้นตอน:

  1. เพิ่ม ngStorage.min.js ในไฟล์ของคุณ
  2. เพิ่มการพึ่งพา ngStorage ในโมดูลของคุณ
  3. เพิ่มโมดูล $ localStorage ในคอนโทรลเลอร์ของคุณ
  4. ใช้ $ localStorage.key = value

2

ฉันเขียนบริการเก็บข้อมูลเชิงมุม html5 ฉันต้องการให้การอัปเดตอัตโนมัติเป็นไปได้ด้วยngStorageแต่ทำให้รอบการสรุปสามารถคาดเดา / ใช้งานได้ง่ายขึ้น (อย่างน้อยสำหรับฉัน) เพิ่มกิจกรรมเพื่อจัดการเมื่อต้องมีการโหลดซ้ำของรัฐและเพิ่มการจัดเก็บเซสชันร่วมระหว่างแท็บ ผมย่อม API หลังและเรียกมันว่า$resource angular-stored-objectมันสามารถใช้ดังนี้:

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

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

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

API เป็นที่นี่

Repo เป็นที่นี่

หวังว่ามันจะช่วยให้ใครบางคน!


ได้โปรดลงคะแนนเพื่ออธิบายคะแนนของพวกเขาได้ไหม
DerMike

1
ตอนนี้ฉันใช้แองกูลาร์ - วัตถุที่เก็บไว้ในโครงการของฉันและมันใช้งานง่ายมาก ยิ่งไปกว่านั้นยาคอฟมีความรวดเร็วในการตอบคำถาม ดังนั้นฉันก็แนะนำเช่นกัน!
JR Utily

2

ทำตามขั้นตอนเพื่อเก็บข้อมูลใน Angular - ที่จัดเก็บในตัวเครื่อง:

  1. เพิ่ม 'ngStorage.js' ในโฟลเดอร์ของคุณ
  2. ฉีด 'ngStorage' ใน angular.module ของคุณ

        eg: angular.module("app", [ 'ngStorage']);
  3. เพิ่ม$localStorageฟังก์ชั่น app.controller ของคุณ

4. คุณสามารถใช้$localStorageภายในตัวควบคุมของคุณ

Eg: $localstorage.login= true;

ด้านบนจะจัดเก็บ localstorage ในแอปพลิเคชันเบราว์เซอร์ของคุณ


1

ขึ้นอยู่กับความต้องการของคุณเช่นถ้าคุณต้องการอนุญาตให้ข้อมูลหมดอายุหรือกำหนดข้อ จำกัด เกี่ยวกับจำนวนเรคคอร์ดที่จะจัดเก็บในที่สุดคุณสามารถดูhttps://github.com/jmdobry/angular-cacheซึ่งช่วยให้คุณกำหนดว่า แคชตั้งอยู่ในหน่วยความจำ localStorage หรือ sessionStorage


1

หนึ่งควรใช้สคริปต์ของบุคคลที่สามสำหรับสิ่งนี้เรียกว่า ngStorage ที่นี่เป็นตัวอย่างวิธีการใช้มันปรับปรุง localstorage กับการเปลี่ยนแปลงในขอบเขต / มุมมอง

    <!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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.