Skip to content

Instantly share code, notes, and snippets.

@kevinwestern
Created May 10, 2014 19:30
Show Gist options
  • Save kevinwestern/1e76f31cb17b04f1004b to your computer and use it in GitHub Desktop.
Save kevinwestern/1e76f31cb17b04f1004b to your computer and use it in GitHub Desktop.
Angular indexedDB
// Code goes here
var myApp = angular.module('myApp', ['ngResource']);
myApp.factory('indexedDB', ['$window', '$q', function($window, $q) {
var version = 2;
var indexedDB = $window.indexedDB;
var request = indexedDB.open('myapp', version);
var db = null;
var defer = $q.defer();
request.onupgradeneeded = function(evt) {
if (request.oldVersion >= version) {
return;
}
var store = request.result.createObjectStore("people", {keyPath: "email"});
var nameIndex = store.createIndex("by_name", "name");
};
request.onsuccess = function() {
defer.resolve(request.result);
};
return defer.promise;
}]);
myApp.factory('dbStorage', ['indexedDB', '$q', function(dbPromise, $q) {
return {
add: function(obj) {
var defer = $q.defer();
dbPromise.then(function(db) {
var tx = db.transaction('people', 'readwrite');
tx.objectStore('people').put(obj);
tx.oncomplete = function(evt) {
defer.resolve();
};
});
return defer.promise;
}
};
}]);
myApp.factory('Person', ['$resource', function($resource) {
return $resource('/api/v1/person/:id', {id: '@id'});
}]);
myApp.service('storage', ['dbStorage', 'Person', function(storage, Person) {
this.add = function(obj) {
storage.add(obj).then(function() {
console.log('added');
});
};
}]);
myApp.controller('HomeCtrl', ['storage', function(storage) {
storage.add({name: 'kevin', email: '[email protected]'});
}]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment