在Angular 8中,如何在应用程序离线时自动保存数据

在Angular 8中,如何在应用程序离线时自动保存数据

当你的应用程序需要离线工作并且CDN(内容交付网络)失败时,自动保存数据就会发挥作用。在这篇文章中,我们将访问所需的步骤,这些步骤是为了在离线时将你的应用程序保存在本地,一旦连接成功就提交。

环境搭建:

  • 在组成使你的应用程序离线工作的库之前,确保下载实际文件(例如:_angular.js _)。
  • 例如,我们将有一个名为_app.js _的基本文件,其中包含我们的Angular代码,还有一个html文档,即_index.html _,其中包含我们所有的html代码。
<!DOCTYPE html>
 
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Offline AutoSave data in Angular 8</title>
</head>
<body data-ng-app="app">
     
    <div data-ng-controller="MainController">
         
        <!-- Main Form -->
         
    </div>
 
<script src="angular.js"></script>
<script src="./app.js"></script>
 
</body>
</html>

因此,让我们以数据输入应用程序为例,建立一个收集有关狗的数据的表格。如果你正在研究狗的各自品种,你的应用程序可能会偶尔离线,这取决于你所在的位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Offline AutoSave data in Angular 8</title>
</head>
<body data-ng-app="app">
 
    <div data-ng-controller="MainController">
         
        <form name="form.DogBreedForm"
      novalidate data-ng-submit="save()">
         
            <label for="commonIdentity">
                           Common Identity</label>
            <input id="commonIdentity" type="text"
                   data-ng-model="formData.commonIdentity">
 
            <label for="breedName">Breed</label>
            <select name="breedName" id="breedName"
                    data-ng-model="formData.breedName">
                <option value="first">First</option>
                <option value="second">Second</option>
                <option value="third">Third</option>
            
 
             
            <label for="BreedFeatures">
                       Breed Features</label>
            <input id="BreedFeatures"
                   type="text"
                   data-ng-model="formData.BreedFeatures">
 
         
            <button type="submit">Save Locally</button>
            <button type="button"
                    data-ng-click="sync()">Sync</button>
 
        </form>
     
    </div>
     
 
<script src="./angular.js"></script>
<script src="./app.js"></script>
 
</body>
</html>

注意,我们已经为所有的输入添加了一个新的术语data-ng-model。让我们为我们的输入数据模型创建一个名为scope.formData的父对象。scope.save函数将处理数据保存实例到本地存储,$scope.sync将处理应用程序上线后的提交操作。

输出(离线时)。

在Angular 8中,如何在应用程序离线时自动保存数据?

Page Output (Enter the Values)

现在,我们处于离线状态,因此它将向我们显示以下信息。

在Angular 8中,如何在应用程序离线时自动保存数据?

我们是离线的

现在让我们深入探讨一下,一旦用户在表单中输入数据,执行功能并离线存储数据。

Save函数 – LocalStorage将把我们的数据保存为字符串键值对。

被存储在localStorage的数据将接受字符串。在下面的save函数中,我们声明了一个stringCopy变量,以及$scope.formData.上的lcKey属性,我们使用了timestamp,这是一个唯一的标识符。

  • JSON File

JSON格式文件通常用于通过网络连接传递结构化数据。它主要在服务器和网络应用之间传输数据。因此,在解析JSON字符串时,如果它是无效的,它会抛出一个异常。为了避免这些异常,让我们使用tr-catch块来处理它。

JSON是JavaScript Object Notation的缩写,是一种独立的语言,json是一种数据格式,它允许我们与任何平台分享数据。它可以将数据分发到任何类型的媒介上,并且链接JSON是不复杂的。

stringCopy = JSON.stringify($scope.formData);

解析localStorage并保存到服务器- 当你离线时,使用JSON.stringify将你的数据存入本地存储。现在我们使用JSON.parse在你的应用程序上线时将数据同步到数据库。

注意:我们在html文档中加入了一个按钮,以保存并提交你的数据到表格部分的本地存储器中。

  • app.js File

App.js代表你设计NodeJs应用程序的主要javascript文件。该文件必须存储在主应用程序根目录下。该文件也可以包含一个不同的名字(例如:main.js)。它在nodejs的功能和html代码之间建立了一个界面,在你的web应用上。

angular.module('app', [])
    .controller('MainController', ['scope', function (scope) {
        var fetchAll = function () {
                 
                var finds = [];
 
                if (localStorage.length === 0) {
                    return [];
                }
 
                for (var i=0;i<localStorage.length;i++) {
                     
                    try {
                        finds.push(
JSON.parse(localStorage.getItem(localStorage.key(i))));
                    } catch (err) {
                        console.log(err);
                    }
 
                }
 
                return finds;
 
            };
 
        scope.formData = {};       
        scope.save = function () {
            var stringCopy = '';
            scope.formData.lcKey = Date.now().toString();
            try {
                stringCopy = JSON.stringify(scope.formData);
            } catch (err) {
 
                 
                console.debug(err);
                return;
            }
            localStorage[scope.formData.lcKey] = stringCopy;
 
        };
 
         
        scope.sync = function () {
 
            var records = fetchAll();
 
             
            if (
navigator && navigator.onLine && records.length) {
 
                    records.forEach(function (find, idx)
                        $http({
                            url: '/api/finds',
                            method: 'POST',
                            data: find
                        }).then(function (res) {
 
                             
                 localStorage.removeItem(find.lcKey.toString());
                 ecords.splice(idx); //remove from records array
 
                        }, function (err) {
 
                            //error handling - service call failures
 
                        });
                    });
 
 
                } else {
 
                    //error handling - Alert the user for patience
                }
 
        };
 
    }]);

最后在同步数据后,输出(在线时)。

在Angular 8中,如何在应用程序离线时自动保存数据?

数据将被保存到你的本地主机

我们使用fetchAll函数来自动检测连接并保存你的数据并同步到数据库中。我们将在提交函数中调用它。一旦建立了连接,存储在localStorage中的数据将通过逐一循环存储的记录进行同步,并将它们提交给数据库。

因此,这篇文章可以帮助你在应用程序离线时将数据存储在本地的localStorage中,并在其上线时使用$scope函数进行输入和解析,将数据同步到数据库。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程