AngularJS: ¿por qué es necesario aplicar $ para resolver correctamente una promesa $ q?

Estoy intentando escribir un pequeño servicio en mi aplicación angular que me permitirá elegir los parámetros de configuración especificados en los objetos globales de Javascript. No quiero intentar acceder al objeto de configuración global a menos que el documento esté listo (porque no puedo garantizar el orden en que se insertarán los elementos del script en el HTML).

Sin embargo, no puedo entender por qué necesito la llamada para$apply para que la resolución en realidad se propague a lathen llamar de vuelta.

myModule.service('GlobalConfigService', ['$q', '$rootScope', function($q, $rootScope) {
    var def = $q.defer();
    $(document).ready(function() {
        def.resolve(MyConfig.val);
        $rootScope.$apply();
    });

    def.promise.then(function () {
        console.log('I am called only when $apply() is called. Why?');
    });

    return def.promise;
}]);

Respuestas a la pregunta(1)

Su respuesta a la pregunta