ionic 通过PouchDB + SQLite来实现app的本地存储(Local Storage)
首先声明,本教程参考国外网站(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中。
//安装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 末尾去掉分号,添加一下代码。
.service('birthday', function () {
var _db;
//dateFix 函数是用来处理SQLite读出的数据的,因为SQLite的存储的数据结构层次优点不同,
//感兴趣的同学可以把数据打印出来研究下
function dateFix (result) {
var data = [];
result.forEach(function (each) {
data.push(each.doc);
});
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准备好之后初始化数据库
.run(function($ionicPlatform, birthday) {
$ionicPlatform.ready(function() {
birthday.initDB();
// 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中的代码修改如下:
<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中修改如下:
.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的页面代码改成这样
<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
代码改成这样:
.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
ionic 通过PouchDB + SQLite来实现app的本地存储(Local Storage)的更多相关文章
- [转]ionic 通过PouchDB + SQLite来实现app的本地存储(Local Storage)
本文转自:http://www.cnblogs.com/ailen226/p/ionic.html 首先声明,本教程参考国外网站(http://gonehybrid.com/how-to-use-po ...
- [转]App离线本地存储方案
App离线本地存储方案 原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localsto ...
- [转]Dcloud App离线本地存储方案
原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localstorage.session ...
- ionic 运用pouchdb/sqlite 数据库做本地存储
配置数据库环境需要3步: 1.安装slqite插件 在ionic 工程目录对应终端执行一下命令: npm install cordova-plugin-sqlite 2.安装pouchdb 在ioni ...
- Wijmo 5 + Ionic Framework之:费用跟踪 App
Wijmo 5 + Ionic Framework之:费用跟踪 App 费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mob ...
- Mobile first! Wijmo 5 + Ionic Framework之:费用跟踪 App
费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mobile first! Wijmo 5 + Ionic Framework ...
- ionic react-native和native开发移动app那个好
ionic react-native和native开发移动app那个好 ? 移动端开发如何选型?这里介绍一下我眼中的ionic,react-native,native 三种移动端开发选型对比.欢迎大家 ...
- ionic react-native和native开发移动app到底那个好
ionic react-native和native开发移动app那个好 ? 移动端开发如何选型?这里介绍一下我眼中的ionic,react-native,native 三种移动端开发选型对比.欢迎大家 ...
- ionic构建APP--简单操作实现APP制作
ionic--基于AngularJS的app框架 1安装ionic .HBuilder创建APP项目,导入ionic的css,js(fonts)文件. .导入ionic.css和ionic.bundl ...
随机推荐
- python:Django
Python的WEB框架有Django.Tornado.Flask 等多种 web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客 ...
- python字符串方法的简单使用
学习python字符串方法的使用,对书中列举的每种方法都做一个试用,将结果记录,方便以后查询. (1) s.capitalize() ;功能:返回字符串的的副本,并将首字母大写.使用如下: >& ...
- JAVA继承时构造函数的问题
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...
- JS正则表达式大全
转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...
- 1.NSNotification|远程通知|本地通知|激光推送
1. 通知在iOS中应用非常广泛,合理的应用通知可以减少冗余代码,使我们的代码层次结构变了更加的清晰明了,利于程序猿读写.它主要分为不可见通知可见通知两种: 1.1 不可见通知,主要是有系统发出的 ...
- -[NSBundle initWithURL:]: nil URL argument'
今天早上同事突然跟我说趣拍的SDK不能用了,一调用就crash,我一听就纳了闷了,原来好好的啊. 然后就开始查呗,马上就要上线了,不搞好,老大会不会杀了我... 搞个全局断点,就停在了一堆我看不懂的界 ...
- js设计模式总结-单例模式
单例模式 解决的问题 保证实例只有一个,避免多个实现,从全局来看,这个实例的状态是唯一的. 实现原理 设置一个变量来记录实例,通过检测该变量是否为空来决定是否创建实例 非透明单例 所谓非透明就是用户在 ...
- Spring MVC静态资源处理
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- Javascript中的集合
集合是由一组无序且唯一(即不能重复)的项组成 function Set() { var items={}; this.has=function(value){ //return value in it ...
- PHP Mysqli 数据库连接
---恢复内容开始--- $connection=new mysqli($db_host,$db_user,$db_password,$db_name);if(!mysqli_connect_errn ...