Wstrzyknięcie rozwiązanej obietnicy do służby
Muszę uzyskać pewne informacje (schemat) z serwera, zanim skonfiguruję kilka usług zależnych od tych informacji.
Mój serwer udostępnia schemat, który definiuje różne właściwości modelu. W moim kodzie kątowym mam usługę, która otrzymuje ten schemat:
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;
});
Chciałbym wstrzyknąć obiekt schematu, a nie obietnicę, do innych usług zależnych od schematu. $ routeProvider pozwala nam to zrobić dla kontrolerów:
app.config(function($routeProvider) {
$routeProvider.
when('/', {
controller: 'SomeCtrl',
resolve: {
schema: 'schema'
},
...
});
});
a to pozwala mi zdefiniować SomeCtrl w ten sposób:
controllers.controller('SomeCtrl', function($scope, schema) {
// schema is an object
...
});
Ale w przypadku usług muszę zrobić:
services.factory('SomeService', function(schema) {
// schema is a promise
schema.then(function(schema) {
...
});
});
Czy mogę to zrobić w jakiś sposób?