我需要從服務器獲取一些信息(模式),然後才能設置一組依賴於該信息的服務。將已解決的承諾注入服務
我的服務器提供了一個模式來定義模型的各種屬性。在我的角度代碼,我應該得到這個模式的服務:
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;
});
我想注入架構對象,而不是承諾,將依賴於模式的其他服務。 $ routeProvider讓我們的控制器做到這一點:
app.config(function($routeProvider) {
$routeProvider.
when('/', {
controller: 'SomeCtrl',
resolve: {
schema: 'schema'
},
...
});
});
,這讓我定義SomeCtrl這樣的:
controllers.controller('SomeCtrl', function($scope, schema) {
// schema is an object
...
});
但對於服務,我要做的:
services.factory('SomeService', function(schema) {
// schema is a promise
schema.then(function(schema) {
...
});
});
是有什麼辦法可以做到這一點?
都能跟得上
示例代碼,這只是它是如何工作的,至少目前如此。 – aet
在實例化控制器之前,角度路由器等待「resolve」內的值解析/拒絕。然後它使用本地值注入控制器(角度注入器更喜歡本地)。 TL; DR:你正在使用兩個不同的'模式'。 –