So it's a hack :)

The $observe callback receives the new value as an argument. (See the [angular-translate code](https://github.com/PascalPrecht/angular-translate/blob/master/src/directive/translate.js#L93).) I suppose you've tried that.