Isso pode parecer óbvio, mas quando sua diretiva é repentinamente atingida com um erro “sem controlador” porque outra diretiva da qual ela depende não está instanciada, pode ser frustrante depurar.
Isso é especialmente verdadeiro quando seu aplicativo estava funcionando perfeitamente bem e processando as diretivas na mesma ordem em que apareciam na marcação. Não caia nessa armadilha, pois os navegadores são legais. A ordem dos atributos não importa para a especificação HTML, então nada é realmente garantido.
Se sua diretiva realmente requer outra, é bom ser explícito e declarar uma prioridade para ela. Pode ser qualquer número, então apenas dê um valor negativo se você quiser que o seu seja inicializado após todas as diretivas integradas (regulares).
Uma coisa a ser observada é a diretiva ngOptions. Não encontrei nada na documentação mencionando, mas se você for à fonte poderá ver isto:
var ngOptionsDirective = valueFn({ terminal: true });
É declarado como terminal, o que significa que em um elemento onde ngOptions está presente, todo o processamento de diretivas para após o nível de prioridade de ngOptions (que é o nível padrão: 0). Portanto, se você tiver sua diretiva de prioridade negativa no mesmo elemento, ela não será usada. (Existem outras diretivas de terminal integradas, como ngRepeat, mas acho que ngOptions é provavelmente o único em que você gostaria de ter suas próprias diretivas no mesmo elemento.)
Para esta situação, se você realmente precisar de ordenação, soluções alternativas devem ser usadas, como armazenar a expressão de opções em outro atributo e compilar um elemento interno com ngOptions.