Tôi cần lấy một số thông tin (lược đồ) từ máy chủ trước khi tôi thiết lập một loạt dịch vụ phụ thuộc vào thông tin đó.Tiêm lời hứa được giải quyết vào dịch vụ
Máy chủ của tôi cung cấp lược đồ xác định các thuộc tính khác nhau của một mô hình. Trong mã góc của tôi, tôi có một dịch vụ mà được schema này:
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;
});
Tôi muốn tiêm đối tượng schema, và không phải là lời hứa, vào các dịch vụ khác mà phụ thuộc vào giản đồ. $ RouteProvider cho phép chúng ta làm điều này cho các bộ điều khiển:
app.config(function($routeProvider) {
$routeProvider.
when('/', {
controller: 'SomeCtrl',
resolve: {
schema: 'schema'
},
...
});
});
và điều này cho phép tôi để xác định SomeCtrl như thế này:
controllers.controller('SomeCtrl', function($scope, schema) {
// schema is an object
...
});
Nhưng đối với các dịch vụ, tôi phải làm:
services.factory('SomeService', function(schema) {
// schema is a promise
schema.then(function(schema) {
...
});
});
Is có cách nào tôi có thể làm điều này?
Không, đó chỉ là cách nó hoạt động, ít nhất là cho bây giờ. – aet
Bộ định tuyến góc chờ các giá trị trong 'giải quyết' để giải quyết/từ chối trước khi khởi tạo bộ điều khiển. Sau đó, nó sử dụng các giá trị cục bộ để đưa vào bộ điều khiển (ống tiêm góc thích người dân địa phương). TL; DR: bạn đang làm việc với hai 'lược đồ' khác nhau. –