@fredj your solution has the advantage of not adding watches, which is good.

Before merging, you could make the templateUrl a little nicer:

```
templateUrl: function(element, attrs) {
    return 'components/topic/partials/topic.' + (attrs.gaTopicUi == 'select') ? 'select.html' : 'html';
}
```