Наличие двух одинаковых кодов хорошо, только если код 1-строчный. Если он занимает несколько строк, код может стать слишком уродливым слишком рано.
Вы можете иметь входной параметр для вашей директивы. Вы можете передать значение form.dirty
в директиву и применить любую логику, какую захотите. Это также спасает вас от дублирования кода.
См. Пример здесь
Редактировать: Сделано решение более общим, каждый компонент может иметь свою собственную функцию и сортировать соответственно.