תרחיבי לגבי הדינמי
יש הבדל בין דימני שבאותו ng-repeat יהיו type-ים שונים, לבין ששינוי ה-type בזמן הריצה אמור לשנות את ה-directive (כלומר, שיש לך אפשרות אחרי שה-view נטען לשנות את ה-type_code וה-view אמור להתאים את עצמו).
 
במצב הראשון - Compile יתאים, כיוון שהוא רץ פעם אחת שה-directive עובר עיבוד.
במצב השני - Compile לא מתאים, כיוון שאם את תשני את type_code לאחר שהעיבוד של ה-Compile יסתיים, זה לא ישפיע.
 
במצב השני, הדרך היא דיי כמו שאת עשית, רק לא הבנתי למה לא להשתמש פשוט ב-ng-if או ng-show (פה לדעתי יש עדיפות ל-ng-if).
 
אגב, אפשר להשתמש בדרך שלך גם ב"מצב הראשון", ואם רוצים להמנע מהצורך של אנגולר כל digest לבדוק את הכל, אז להשתמש ב-one time binding (למשל: loaded="::question.type_code =='main_image'").
 
תסתכלי על one time binding פה:
https://docs.angularjs.org/guide/expression