Injizieren eines entschlossenen Versprechens in den Dienst
Ich muss einige Informationen (ein Schema) vom Server abrufen, bevor ich eine Reihe von Diensten einrichten kann, die von diesen Informationen abhängen.
Mein Server stellt ein Schema bereit, das verschiedene Eigenschaften eines Modells definiert. In meinem Angular Code habe ich einen Dienst, der dieses Schema abruft:
services.factory('schema', function($q, $http) {
var deferred = $q.defer();
$http.get('schema/').then(function(response) {
schema = // some function of response.data
deferred.resolve(schema);
}, function() {
deferred.reject('There was a problem fetching the schema');
});
return deferred.promise;
});
Ich möchte das Schemaobjekt und nicht das Versprechen in andere vom Schema abhängige Dienste einfügen. Mit $ routeProvider können wir dies für Controller tun:
app.config(function($routeProvider) {
$routeProvider.
when('/', {
controller: 'SomeCtrl',
resolve: {
schema: 'schema'
},
...
});
});
und das erlaubt mir SomeCtrl so zu definieren:
controllers.controller('SomeCtrl', function($scope, schema) {
// schema is an object
...
});
Aber für Dienstleistungen muss ich tun:
services.factory('SomeService', function(schema) {
// schema is a promise
schema.then(function(schema) {
...
});
});
Kann ich das auf irgendeine Weise tun?