For a recent project, I was looking at ways to have data in an AngularJS controller automatically update itself whenever IndexedDB transactions were committed. As a secondary goal, I was interested in shifting the burden of indexeddb-wrangling to a third party.
How we talk to IndexedDB, for this project, is less of a priority. I started with a way to simplify specifying a query that would update itself, and do so in a dead-simple way. This meant:
.thenand error handlers to the promise, and have these execute with the query is re-run.
The BoundQuery factory (code) is a first attempty. It somewhat cheats: it relies on the excellent, promise-driven DexieJS IndexedDB and the proof-of-concept ngDexie AngularJS wrapper. However, the scope-wrapping and event-listening, passing in callback, should work with other approaches.
demo1 stays small. It just shows a single list
(and thus single IndexedDB table). You can add and delete todo
items. demo2 re-organizes the code into a module file,
controllers file, and a factories file that abstracts the
demo3 puts the ideas more to use. It has
multiple todo lists and allows viewing a todo. It arranges these
views into a single-page application using
as a series of nested states. As you move up and down the URL
structure, you don't re-run queries unless you need to.
Additionally, the home page lets you turn on a simulation of a background process that gets new data. In this case, it simulates jamming new todo items onto the first todo list every 5 seconds.