Tak po chvilce googlení jsem zjstil, že zrovna v nahrazování <tr> je v Angularu bug a asi ho není zrovna snadné obejít. Takže v tomhle případě je jednodušší použit atributovou direktivu.
Atributové a elementové direktivy jsou v zásadě rovnocenné, že se používají různě je spíše konvence, než nutnost.
Elementy: musí se nahrazovat, představují složitější samostatné komponenty s vlastní logikou
Atributy: nemusí (ale mohou) se nahrazovat, nejde většinou o samostatné komponenty, ale slouží k přidání logiky do stávajícího elementu