AngularJS port of Mike Wassons' BookService demo