I have various services that contain data and single state from where I resolve data from the service in order to avoid multiple sates. My problem is that I can't figure out how to pass/retrieve service name into state depending on item. Here is my sample code to get an idea:
This is my single state, it serves to construct the url and resolve data from specific service, the problem is that I need to find a way to pass a service name here just like :itemId. I know that service is an object so I probably can't just save its relative name like ID inside each item, but what could be a solution? Here are my codes:
.state('single', {
url: '/:itemUrl/:itemId',
templateUrl: 'templates/single.html',
controller:'singleCtrl',
resolve: {
item: function($stateParams, data1Service) {
return data1Service.getItem($stateParams.itemId);
}
}
});
These are my various services where I hold data:
app.service('data1Service', function($q, $rootScope, $filter, $translate) {
$translate = $filter('translate');
return {
items: [{
id: '1',
title:$translate('TITLE'),
lang:$translate('LANG'),
price:$translate('PRICE'),
serviceName: 'data1Service' //I thought maybe I could save service name like that and then retrieve it somehow without loosing data reference.
}],
getItems: function() {
return this.items;
},
getItem: function(itemId) {
var dfd = $q.defer();
this.items.forEach(function(item) {
if (item.id === itemId) dfd.resolve(item);
});
return dfd.promise;
}
};
});
Another one, etc:
app.service('data2Service', function($q, $rootScope, $filter, $translate) {
$translate = $filter('translate');
return {
items: [{
id: '1',
title:$translate('TITLE'),
lang:$translate('LANG'),
price:$translate('PRICE')
}],
......
Thank you for any advice.