Potrzebuję uzyskać pewne informacje (schemat) z serwera, zanim skonfiguruję pakiet usług zależnych od tych informacji.Wstrzykiwanie rozwiązanej obietnicy do usługi
Mój serwer udostępnia schemat definiujący różne właściwości modelu. W moim kątowej kodu, mam usługę, która dostaje 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ąć obiektu schematu, a nie obietnicy, z innymi usługami, które zależą od schematu. $ RouteProvider pozwala nam robić to dla kontrolerów:
app.config(function($routeProvider) {
$routeProvider.
when('/', {
controller: 'SomeCtrl',
resolve: {
schema: 'schema'
},
...
});
});
a to pozwala mi określić SomeCtrl tak:
controllers.controller('SomeCtrl', function($scope, schema) {
// schema is an object
...
});
Ale za usługi, mam do zrobienia:
services.factory('SomeService', function(schema) {
// schema is a promise
schema.then(function(schema) {
...
});
});
Czy w jaki sposób mogę to zrobić?
Nie, to po prostu, jak to działa, przynajmniej na razie. – aet
Kątowy router czeka na wartości w ciągu 'resolve', aby rozwiązać/odrzucić przed utworzeniem kontrolera. Następnie wykorzystuje lokalne wartości do wstrzyknięcia do kontrolera (kątowy wtryskiwacz preferuje locals). TL; DR: pracujesz z dwoma różnymi "schematami". –