First crack at an Angular implementation.