scope.$watch()'s callback is function(newValue, oldValue) not function(...

scope.$watch()'s callback is function(newVal, oldVal), not function(oldVal, newVal). With the arguments in order, $timeout is not needed.