Should a directive be used in AngularJS to implement a widget or a controller/service? When talking about a widget I'm thinking of a UI control that you would interact with from a controller e.g. dialog, tree, grid, chart.
For example if I was to create a Dialog widget I would want to call a show() function on the widget to display the dialog. This doesn't seem to be possible using directives. I've seen a variable used, e.g. 'showDialog', on the root scope that the directive watches to work around this. In angular-ui they use a service to implement the dialog.