Apologies to those who feel I'm belaboring this point... I do so because the app I'm converting has a huge number of GWT DataGrids. If I can't DRY up the Angular 2 implementation between them I'll crash and burn. To be clear I'm discussing just the table itself not any of the associated bells and whistles. So:
I started out on an md-data-table
feeling very strongly that a "component" should be compose-able, but encapsulate it's own behaviors and abstract away its implementation details. So for a DataTable I tried to encapsulate all the table mark-up, and all the 'normal' behaviors like row rendering and column sorting. (i.e. don't make me write my own ngFor to use your component, etc.)
Column headings are fairly static, and their central behavior is for sorting the content, so given a columns model interface like this
export interface MdDataTableColumn {