2013-06-18 33 views
43

Tôi có một dịch vụ kiễu góc/nhà cung cấp phục vụ dữ liệu json để điều khiển của tôi mà các công trình lớn:

angular.module('myApp.services', ['ngResource']). 
     factory("statesProvider", function($resource){ 
     return $resource('../data/states.json', {}, { 
     query: {method: 'GET', params: {}, isArray: false} 
     }); 
    }); 

Nhưng Tôi cũng cần để phục vụ dữ liệu json với bộ điều khiển tương tự từ một tập tin counties.json.

Tôi có thể tìm hiểu cách viết một dịch vụ phục vụ cả hai tệp cho bộ điều khiển của tôi ở đâu?

Trả lời

93

Bạn có thể cập nhật dịch vụ để trả về một hash của các nguồn lực, không phải là một đơn một:

angular.module('myApp.services', ['ngResource']). 
    factory("geoProvider", function($resource) { 
    return { 
     states: $resource('../data/states.json', {}, { 
     query: { method: 'GET', params: {}, isArray: false } 
     }), 
     countries: $resource('../data/countries.json', {}, { 
     query: { method: 'GET', params: {}, isArray: false } 
     }) 
    }; 
    }); 

Bạn sẽ có thể sử dụng nó thêm .query() ở cuối tên hàm của bạn tức là geoProvider.states.query()geoProvider.countries.query()myApp.services phải được đưa vào bộ điều khiển của bạn, sau đó tiêm geoProvider dịch vụ vào bộ điều khiển chính nó là tốt.

+1

Điều này có vẻ như những gì tôi đang tìm kiếm nhưng bạn có thể giải thích cách gọi "tiểu bang" và "quốc gia" khỏi bộ điều khiển không? Thông thường, tôi sẽ chỉ làm myApp.services.query(). Cảm ơn – chapstick

+2

@chapstick Để sử dụng nó, bạn nên tiêm mô-đun 'myApp.services' vào mô-đun chứa bộ điều khiển, sau đó tiêm dịch vụ' geoProvider' vào bộ điều khiển. Sau khi bạn có thể sử dụng 'geoProvider.states.query()' và 'geoProvider.countries.query()' trong bộ điều khiển –

9

Tôi giả sử bạn muốn thực thi một số mã khi cả hai tệp đều được tải. Lời hứa làm việc thực sự tốt cho việc này. Tôi không nghĩ rằng các tài nguyên trả về lời hứa, nhưng bạn có thể sử dụng dịch vụ $ http cho các cuộc gọi ajax đơn giản.

Ở đây tôi xác định một dịch vụ cho hai tệp dữ liệu và dịch vụ thứ ba trả về lời hứa sẽ được hoàn thành khi cả hai tệp được tải xong.

factory('states',function($http) { 
    return $http.get('../data/states.json'); 
}). 
factory('countries',function($http) { 
    return $http.get('../data/countries.json'); 
}). 
factory('statesAndCountries', function($q, states, countries) { 
    return $q.all([states, countries]); 
}); 

Sau đó, trong điều khiển của bạn:

statesAndCountries.then(function(data) { 
    var stateData = data[0]; 
    var countryData = data[1]; 
    // do stuff with stateData and countryData here 
}); 
Các vấn đề liên quan