Для множества запросов есть $q.all вот
урок как пользоваться
в директиве что-то такое
scope.$watch(attrs.loading, function(newVal, oldVal, scope){
if(newVal){
if(newVal.$promise && !newVal.$resolved){
promise = newVal.$promise;
} else {
promise = newVal;
}
if(_.isFunction(promise.finally)){
startLoading();
promise.finally(endLoading);
}
}
});
и остается только собрать обещания всех контроллеров в одно обещание