[转]ionic 通过PouchDB + SQLite来实现app的本地存储(Local Storage)

本文转自:http://www.cnblogs.com/ailen226/p/ionic.html

首先声明,本教程参考国外网站(http://gonehybrid.com/how-to-use-pouchdb-sqlite-for-local-storage-in-your-ionic-app/)

代码书写格式上不一样!

1. ionic是跨平台app开发的工具(Cordova)的一个框架!

2.PouchDB是操作SQLite数据库的javascript库(跟mongoose操作mongodb一样)!

3.SQLite是一种轻量级的嵌入式数据库(数据库不需要你安装的,手机系统自带,你需要安装的就是SQLite插件)!

第一步 :安装Cordova 和 ionic  命令如下:

 

npm install -g cordova ionic

第二步:创建工程  命令如下:

ionic start birthday

第三步:安装SQLite插件和pouchdb.js库,并将pouchdb引入到index.html中。

?


1

2

3

4

5

6

7

8

//安装SQLite插件

cordova plugin add io.litehelpers.cordova.sqlitestorage

//安装pouchdb库

bower install pouchdb

//在index.html引入pouchdb

<script src="lib/pouchdb/dist/pouchdb.min.js"></script>

 第四步:环境基本OK了!接下来开始写代码了!

  首先配置service你也可以用factory,我用的service。在www/js/services.js 末尾去掉分号,添加一下代码。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

.service(‘birthday‘, function () {

  var _db;

  //dateFix 函数是用来处理SQLite读出的数据的,因为SQLite的存储的数据结构层次优点不同,

  //感兴趣的同学可以把数据打印出来研究下

  function dateFix (result) {

    var data = [];<br>  result.forEach(function (each) {<br>    data.push(each.doc);<br>  });

    return data

  };

  return {

    initDB: function () {

      _db = new PouchDB(‘birthday‘, {adapter: ‘websql‘});

    },

    getAllBirthday: function (callback) {

      _db.allDocs({include_docs: true}).then(function (result) {

        callback(dateFix(result.rows));

      })

    },

    addBirthday: function (birthday) {

      _db.post(birthday);

    },

    removeBirthday: function (birthday) {

      _db.remove(birthday);

    }

  }

});

  第五步:项目启动时我们要初始化数据库,所以我们在.run()方法里初始化数据库;

  有颜色的地方就是加的代码,第一处时注入我们之前定义的service(‘birthday‘)。现在注入进去。

               第二处表示$ionicPlatform准备好之后初始化数据库

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

.run(function($ionicPlatform<span style="background-color: rgb(255, 0, 255);">, birthday</span>) {

  $ionicPlatform.ready(function() {

    <span style="background-color: rgb(255, 0, 255);">birthday.initDB();</span>

    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard

    // for form inputs)

    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {

      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);

      cordova.plugins.Keyboard.disableScroll(true);

    }

    if (window.StatusBar) {

      // org.apache.cordova.statusbar required

      StatusBar.styleLightContent();

    }

  }

  

  第六步:开始controller里和views里的代码了

    工程中的路由都已经配置好了,我们直接修改她的controller和views就行了!

    展示生日我们用tab-dash.html, 对应的controller是DashCtrl;

    tab-dash.html中的代码修改如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

<ion-view view-title="Dashboard">

  <ion-content class="padding">

    <div class="list card" ng-repeat="birthday in birthdays">

      <div class="item item-divider">{{birthday.date}}</div>

      <div class="item item-body">

        <div>

          {{birthday.name}}

        </div>

      </div>

    </div>

  </ion-content>

</ion-view>

  DashCtrl中修改如下:

?


1

2

3

4

5

6

7

8

9

10

.controller(‘DashCtrl‘, function($scope, birthday) {

  $scope.birthdays = [];

  $scope.init = function () {

    birthday.getAllBirthday(function (data) {

      console.log(data);    //还没保存数据目前打印的是空数组

      $scope.birthdays = data;

    })

  };

  $scope.init();

})

  第七步:开始保存数据页面的controller和views编写了!

    存储数据的页面就用tab-account.html, controller就用AccountCtrl。

  tab-account.html的页面代码改成这样

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<ion-view view-title="Account">

  <ion-content>

    <ion-list>

    <div class="row">

        <div class="col col-100" style="height:100px;"></div>

    </div>

    <div class="row">

        <div class="col col-10">{{name}}</div>

        <div class="col col-80"></div>

        <div class="col col-10">{{date}}</div>

    </div>

    <div class="row">

        <div class="col col-20">

            姓名:

        </div>

        <div class="col col-80">

            <input type="text" ng-model="a.name" style="border:1px solid black"  >

        </div>

    </div>

    <div class="row">

        <div class="col col-20">

            生日:

        </div>

        <div class="col col-80">

            <input type="text" ng-model="a.date" style="border:1px solid black" >

        </div>

    </div>

    <div class="row">

        <div class="col col-20"></div>

        <div class="col col-20">

            <button ng-click="psotBirthday()">保存</button>

        </div>

        <div class="col col-60"></div>

    </div>

    </ion-list>

  </ion-content>

</ion-view>

  接下来修改AccountCtrl

  代码改成这样:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

.controller(‘AccountCtrl‘, function($scope, birthday) {

  $scope.a = {}

  $scope.psotBirthday = function () {

    console.log($scope.a);

    if (!$scope.a.name && !$scope.a.date) {

      alert("姓名和日期不能为空!");

      return;

    };

    birthday.addBirthday($scope.a);

    $scope.a.name = ‘‘;

    $scope.a.date = ‘‘;

  }

});

  效果图:在此页面输入                              再点击Status显示如下:

                             

    OK到现在,我已经把通过pouchdb和SQLite在手机本地存储数据,取出数据的过程已经演示完成。至于删除也很简单的。

     我相信你可以自己去查看官方文档,自己去实现的!

  pouchdb官方API地址:http://pouchdb.com/api.html#delete_document

时间: 2024-08-04 14:14:39

[转]ionic 通过PouchDB + SQLite来实现app的本地存储(Local Storage)的相关文章

[转]App离线本地存储方案

App离线本地存储方案 原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localstorage.sessionstorage.websql.indexedDBHTML5Plus扩展方案:plus.navigator.setCookie.plus.storage.plus.io cookie体量最小,可以设置过期时间.不能跨域. localstorage适合key.value键值对的存

[转]Dcloud App离线本地存储方案

原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localstorage.sessionstorage.websql.indexedDBHTML5Plus扩展方案:plus.storage.plus.io cookie体量最小,可以设置过期时间. localstorage适合key.value键值对的存储,数据量一般不超过5M.是常用的轻量数据存储方案. sessionstorage也

ionic 运用pouchdb/sqlite 数据库做本地存储

配置数据库环境需要3步: 1.安装slqite插件 在ionic 工程目录对应终端执行一下命令: npm install cordova-plugin-sqlite 2.安装pouchdb 在ionic 工程目录对应终端执行一下命令: npm install pouchdb 3.在工程目录www的index.html里添加pouchdb.js源文件 <script src="lib/pouchdb/dist/pouchdb.min.js"></script> 使

Use SQLite Instead of Local Storage In Ionic Framework【转】

Switching to object-based data storage can often be tough.  If you’re trying to start Phonegap or Ionic Framework development and are coming from native development, the whole local storage concept can be a tough one to grasp.  Or maybe you just pref

Mobile first! Wijmo 5 + Ionic Framework之:费用跟踪 App

?? 费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mobile first! Wijmo 5 + Ionic Framework之:Hello World!>的环境,将在本教程中完成费用跟踪App的构建.下面的代码结构是本教程完成要达到的效果,请预先创建好文件和目录. www/ --> 工程根目录 index.html --> app 布局文件 (主HTML文件) css/ --> css 目录 js/

ionic react-native和native开发移动app那个好

ionic react-native和native开发移动app那个好 ? 移动端开发如何选型?这里介绍一下我眼中的ionic,react-native,native 三种移动端开发选型对比.欢迎大家补充指正 一. 跨平台特性    ionic : write once, run anywhere ( 一次开发,随处运行,学习成本低 会html css js就可以学会) 不涉及到系统级的开发的话, 确实是一次开发 处处运行,如果涉及到系统级API调用以及项目配置(如 ios plist文件)则需

Ionic2学习笔记(8):Local Storage& SQLite

作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5557947.html ? ? ? ? ?Ionic2可以有两种方式来存储数据,Local Storage和SQLite ? LocalStorage ? 因为比较容易访问,所以不适合存比较敏感性的数据 比如可以存储: 用户是否登录的信息. 一些session信息等 具体用法: 进入项目目录:cd MyFirstApp 在主页设置一个按钮,点击按钮,获取LocalStorage的数据并打印在控制台

移动互联网实战--资源类APP的数据存储处理和优化

前言: 对于资源类的APP, 其音频/图形占据了APP本身很大的比例. 如何存储和管理这些资源文件, 成了一个颇具挑战性的难点. 移动端的碎片化, 高中低端手机的并存, 需要开发者不光是具备基础的存储知识, 更需要基本优化的能力. 本文首先介绍手机硬件的基础, 后续会分别介绍存储方式, 资源打包, 最后以一个具体例子作结. 内容还是浅显, 望能抛砖引玉. *) 硬件基础 作为手机开发者人员, 你是否知道RAM/ROM/存储卡的区别? 而产商所宣传的运行内存, 机身内存又是什么? 1). RAM/

Jni Error(app bug): accessed stale local reference 的另类出现方式

Jni Error(app bug): accessed stale local reference 这个错误平常是 弱全局变量引起的时候 出现的一个错误,但是今天我却在另外一种情况下遇到了 下面是错误截图 出现错误的原因其他很简单 是因为自己的粗心引起的 java层函数声明是这么写的 public native String screenshot(int x,int y,int x1,int y1,byte[] path); jni是这么写的 void Java_java_api_JniUti