This article is a Hall of Shamer™ because I've not ensured its relevance with the latest in Angular.js. I brought it back by request.